"Write once, run anywhere," they said. "Be easy," they said.

16 September 2021

Java was once the hottest thing since sliced bread. From the very beginning it was said to be platform independent (meaning, you could run it on Intel, Motorola, ARM, or whatever else you wanted) and architecture neutral (it was designed to ignore what it was running on top of). The dream was that you could take whatever software you'd written and compiled into Java bytecode, put it onto whatever system you had as long as it had a Java runtime environment, and it should work. "Write once, run anywhere" was the motto.

In practice, not so much. But that's not what I'm complaining about.

A couple of weeks ago (as you read this, days for me) I had upgraded Leandra per the usual process, rebooted, and then logged back in to check everything out. As it happened YaCy freaked out and was locked up solid. I wasted most of the afternoon figuring out what had happened.

Without going into a lot of detail (most of which was blind alleys and rabbit holes) I figured out that the version of OpenJDK I was running on Leandra (OpenJDK v8.u292-1) had been upgraded to the latest supported version (OpenJDK 11.0.12.u7-1). However, YaCy needed to be recompiled. Which, theoretically, you don't have to do with Java, but I'm far from an expert in this particular language.

Anyway, I eventually figured out the following very simple process to fix the problem, which I would have used with just about any other language:

cd ~/yacy_search_server

# Update the source code.
git pull

# Clean out the old binaries.
ant clean all

# Restart YaCy, which rebuilds the binaries in this case.
./startYACY.sh

When you install just about everything from voluminous repositories of packages for years on end, it's very easy to forget that sometimes you have to do things the manual way.