Java port maintainers: What should be installed on the buildbot workers?

Aaron Madlon-Kay aaron+macports at madlon-kay.com
Sat Feb 24 12:17:11 UTC 2018


> Oracle Java 7 and 8 are compatible with Lion and later.

Java 8 requires Mountain Lion:
http://www.oracle.com/technetwork/java/javase/certconfig-2095354.html

> My understanding is that one must choose either Apple's Java 6 or Oracle's Java 7 or 8; they can't coexist.

I’m not aware of any scenario where this is the case. You can have umpteen installations of Java coexist at once, living in /Library/Java/JavaVirtualMachines. You will generally set your JAVA_HOME to the one you want to use by default.

You can only have one Java in /Library/Internet Plug-Ins/JavaAppletPlugin.plugin, and I believe launching raw JARs or JNLPs will use this Java, but any properly packaged program will come with its own JRE, or have a launch script that uses e.g. /usr/libexec/java_home to discover the appropriate Java.

> I think I should probably install Oracle's latest Java 8 on the Lion and later buildbot workers. Does that seem reasonable?

I think that sounds reasonable. Older Javas are already EOL. However per above it will have to be Mountain Lion and later.

> I also don't know what happens if we do that, and then a user who has Apple's legacy Java 6 installed receives a binary archive of a Java-using port. Does it work? Does it fail?

Java binaries have some minimum required JDK version, and are usually forward-compatible. A binary that requires Java 7 or 8 would fail in that scenario (assuming the user *only* has Java 6 installed). A binary requiring Java 6 will generally run on 6 or later, so it would work.

I don’t think there’s a good way to test for the minimum required Java for a given binary. I think it would make sense to make that a portgroup property that would be set in each individual portfile.

> However, if a Java port would build differently depending on whether Apple's legacy Java 6 or Oracle's Java 7 or 8 is installed, we may have to prevent distribution of binary archives of Java ports anyway, at least in the case where we detect that the Java the user has installed is not the Java that we decide to install on the buildbot workers.

Generally you can build projects on a newer Java than what the project targets, e.g. you can build a Java 7 project with Java 8 and still have it run on Java 7. However this is frowned upon (see https://stackoverflow.com/a/12050087/448068) so if you’re going to be strict about it you probably need to install all available Java versions and make sure only to build with the one required by that project.

-Aaron


> On Feb 24, 2018, at 9:43, Ryan Schmidt <ryandesign at macports.org> wrote:
> 
> I'd appreciate advice from maintainers of ports that use Java. What Java should be installed on the buildbot workers?
> 
> Currently, only our Leopard and Snow Leopard buildbot workers have Java installed, because Apple's Java was included in the Mac OS X installer. It's a very old version (Java 2 build 1.5.0_30-b03-389-9M3425 on Leopard, Java SE build 1.6.0_65-b14-462-10M4609 on Snow Leopard) but it's something.
> 
> Apple removed its Java from the OS X installer in Lion, and I have not separately installed Java on the Lion and later buildbot workers, because I didn't know what should be installed. 
> 
> Apple's legacy Java 6 distribution can be installed on Lion and later up to and including High Sierra, but Apple doesn't recommend it. They recommend using the latest Oracle Java. Oracle Java 7 and 8 are compatible with Lion and later.
> 
> My understanding is that one must choose either Apple's Java 6 or Oracle's Java 7 or 8; they can't coexist.
> 
> I think I should probably install Oracle's latest Java 8 on the Lion and later buildbot workers. Does that seem reasonable? I don't know if our java portgroup is compatible with that. I also don't know what happens if we do that, and then a user who has Apple's legacy Java 6 installed receives a binary archive of a Java-using port. Does it work? Does it fail?
> 
> A second option is to install Apple's legacy Java 6 on the Lion and later buildbot workers. I'm guessing this is not the right choice, since it is old and probably has security problems. And the same questions arise again: Would this be compatible with the java portgroup? And what happens if a user who has Oracle Java 7 or 8 installed gets a binary archive built using legacy Java 6? Does it work or fail?
> 
> A third option is to do nothing. I think this isn't great because it means that ports that use Java fail on the Lion and later buildbot workers, which prevents maintainers from learning about legitimate build failures their ports may have, and prevents users from receiving binary archives of distributable Java ports. However, if a Java port would build differently depending on whether Apple's legacy Java 6 or Oracle's Java 7 or 8 is installed, we may have to prevent distribution of binary archives of Java ports anyway, at least in the case where we detect that the Java the user has installed is not the Java that we decide to install on the buildbot workers.
> 



More information about the macports-dev mailing list