Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-75671

Selected Java version ignored from Maven / issue with LD_LIBRARY_PATH

XMLWordPrintable

      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?

       

            Unassigned Unassigned
            sebastienp Sébastien
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: