Sorry to slightly digress, but based on these discussions, shouldn't we be setting JAVA_HOME to point to JDK 7 in all our builds? Especially based on Andrew's comment above: "
*Java 7 is not forwards compatible with Java 8, especially with respect toJRE internals. What that means is if you compile something with Java 8,even if you are not using Java 8 language features, you won't be able torun it on a Java 7 runtime.*" Our 4.x build <https://builds.apache.org/view/M-R/view/Phoenix/job/Phoenix-4.x-matrix/configure> is configured with java 1.8: [image: 4.x.png] In our master build <https://builds.apache.org/view/M-R/view/Phoenix/job/Phoenix-master-matrix/configure>, we don't even specify JAVA_HOME, so essentially it picks up the latest version. Precommit gets JAVA_HOME set from $PHOENIX/dev/jenkensEnv.sh. There have been issues where master builds failed because they used JDK 11 ( https://builds.apache.org/job/Phoenix-master-matrix/HBASE_PROFILE=2.1/71/consoleFull), search for "JAVA VERSION" in the log file. The same build does not fail if run with JDK 8. Also, doesn't this mean we are already compiling with Java 8 (at least in the 4.x branches) or am I missing something? <https://builds.apache.org/view/M-R/view/Phoenix/job/Phoenix-4.x-matrix/configure> On Wed, Apr 22, 2020 at 8:11 PM Ankit Singhal <ankitsingha...@gmail.com> wrote: > Just linking a discussion we had one and a half years back on the same [1], > considering nothing has changed since then because Java 7 was EOLed in July > 2015 > and Phoenix 5.0 was also out, it majorly comes to the point of the > inconvenience of working > on old code style and extra efforts required to create patches for each > branch. > > Let's say if we decide to upgrade to Java8(Option 3), don't we require the > following changes? > > * Major version upgrade from 4.x-HBase-1.x to 5.x-HBase-1.x:- As upgrading > 4.x branches > to Java8 breaks the compatibility with HBase and Java runtime, we need to > ensure that > we adhere to dependency compatibility between the minor releases as it is > expected that > Phoenix minor upgrade should be just a server jar drop and a restart (even > though > we don't explicit covers Java runtime in our backward compatibility [2] as > HBase does[3] > but people are used to it now) > > * Release Notes and convenience libraries:- Though we would say that it is > compatible with > HBase version 1.x but require a Java8, so we need to be explicit with our > convenience libraries > as well , like append "jdk8" to a name or something similar > (phoenix-server-HBase-1.x-jdk8.jar). > And also provide clarity on the version upgrade > > * Avoiding issues during runtime:- Though JAVA8 and JAVA7 are said to be > binary compatible > and are expected to be fine in Java8 runtime but it has been called out > there are rare instances > which can cause issues due to some incompatibilities between JRE and > JDK[4]. (As Andrew also > called out and might have observed the same) > > > Though I agreed with Istvan that creating multiple patches and dealing with > change in code style every time > we switch branches has put additional load on the contributor but IMHO, we > should wait for > HBase-1.x to upgrade Java before we do it to avoid the some of the issues > listed above related to Option 3. > > Option2 would be preferred at the time when we decide on whether we want to > diverge from feature > parity in our major releases and we do only limited fixes for 4.x branch. > So basically I'm also in favor of Option 1 (continuing Java 7 for HBase-1.x > and code style as much possible for 5.x). > > [1] > > https://lists.apache.org/thread.html/970db0b5cb0560c49654e450aafb8fb759596384cefe4f02808e80cc%40%3Cdev.phoenix.apache.org%3E > [2]http://phoenix.apache.org/upgrading.html > [3] https://hbase.apache.org/book.html#hbase.versioning > [4] > > https://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html#A999387 > > Regards, > Ankit Singhal > -- Chinmay Kulkarni