Hi,
We are using Alpine Docker image of Jenkins with some minor modifications (add JDK/Maven, see Containerfile).
It works for Java 11/17. But when we try to select Java 8, Maven try to work with default Java 17.
A simple item with shell step (item.xml) is good to understand the issue.
- I am started from a new Jenkins installation (build this image and put it on K8S)
- configure theses JDKs:
- and Maven:
- then create a small item, select JDK8:
- add a small SH step:
Result is:
+ env
+ egrep -i 'java|maven|mvn'
LD_LIBRARY_PATH=/opt/java/openjdk/lib/server:/opt/java/openjdk/lib:/opt/java/openjdk/../lib
PATH=/usr/lib/jvm/java-8-openjdk/bin:/usr/lib/jvm/java-8-openjdk/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME=/usr/lib/jvm/java-8-openjdk
+ mvn -version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /usr/share/java/maven-3
Java version: 17.0.15, vendor: Eclipse Adoptium, runtime: /opt/java/openjdk
=> Maven is ignoring Java version.
Same item with JDK11 selected will show:
+ egrep -i 'java|maven|mvn'
+ env
LD_LIBRARY_PATH=/opt/java/openjdk/lib/server:/opt/java/openjdk/lib:/opt/java/openjdk/../lib
PATH=/usr/lib/jvm/java-11-openjdk/bin:/usr/lib/jvm/java-11-openjdk/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME=/usr/lib/jvm/java-11-openjdk
+ mvn -version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /usr/share/java/maven-3
Java version: 11.0.27, vendor: Alpine, runtime: /usr/lib/jvm/java-11-openjdk
=> This time, Java is kept.
Inside the container:
I tried the same thing inside the container:
$ PATH=/usr/lib/jvm/java-8-openjdk/bin:/usr/lib/jvm/java-8-openjdk/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ JAVA_HOME=/usr/lib/jvm/java-8-openjdk $ mvn -version Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: /usr/share/java/maven-3 Java version: 1.8.0_442, vendor: IcedTea, runtime: /usr/lib/jvm/java-1.8-openjdk/jre
=> Java 8 is used when using the same PATH/JAVA_HOME inside the container. And I can compile my job without any issue.
Then, I added a sleep in the item's shell and try the same.
- Jenkins side:
Started by user test Running as SYSTEM Building in workspace /var/jenkins_home/workspace/test [test] $ /bin/sh -xe /tmp/jenkins261728399817221844.sh + env + egrep -i 'java|maven|mvn' LD_LIBRARY_PATH=/opt/java/openjdk/lib/server:/opt/java/openjdk/lib:/opt/java/openjdk/../lib PATH=/usr/lib/jvm/java-8-openjdk/bin:/usr/lib/jvm/java-8-openjdk/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin JAVA_HOME=/usr/lib/jvm/java-8-openjdk + sleep 10s + mvn -version Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: /usr/share/java/maven-3 Java version: 17.0.15, vendor: Eclipse Adoptium, runtime: /opt/java/openjdk
- Inside Jenkins container, I exported PATH/JAVA_HOME and launch the same shell script:
$ export PATH=/usr/lib/jvm/java-8-openjdk/bin:/usr/lib/jvm/java-8-openjdk/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
$ /bin/sh -xe /tmp/jenkins261728399817221844.sh
+ env+
egrep -i 'java|maven|mvn'
PATH=/usr/lib/jvm/java-8-openjdk/bin:/usr/lib/jvm/java-8-openjdk/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME=/usr/lib/jvm/java-8-openjdk
+ sleep 10s
+ mvn -version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /usr/share/java/maven-3
Java version: 1.8.0_442, vendor: IcedTea, runtime: /usr/lib/jvm/java-1.8-openjdk/jre
Starting from this, I noticed "LD_LIBRARY_PATH" and add as exported var into the shell (I did not change the other vars):
/ $ export LD_LIBRARY_PATH=/opt/java/openjdk/lib/server:/opt/java/openjdk/lib:/opt/java/openjdk/../lib / $ mvn -version Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: /usr/share/java/maven-3 Java version: 17.0.15, vendor: Eclipse Adoptium, runtime: /opt/java/openjdk
Ok, so it seems to be that "LD_LIBRARY_PATH" is causing this issue only with Java 8.
$ export PATH=/usr/lib/jvm/java-11-openjdk/bin:/usr/lib/jvm/java-11-openjdk/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk $ mvn -version Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: /usr/share/java/maven-3 Java version: 11.0.27, vendor: Alpine, runtime: /usr/lib/jvm/java-11-openjdk
So, Java 11 is not affected by "LD_LIBRARY_PATH".
"LD_LIBRARY_PATH" is not set at OS level. But at Jenkins level. I do not know its used nor if I can unset it on my side.
Not sure it is an Maven issue ou Jenkins issue.
Does someone has an idea?