25

I installed openjdk-6-jdk on my ubuntu box using apt-get.

In system info jenkins is telling me Java.Home is /usr/lib/jvm/java-6-openjdk/jre

However when I specify that directory as JAVA_HOME in Jenkins : "configure system", it returns error message saying that directory does not look like a jdk directory.

it is also failing to pick up my maven install.

Am I missing something obvious ?

Mariusz Jamro
  • 30,615
  • 24
  • 120
  • 162
NimChimpsky
  • 46,453
  • 60
  • 198
  • 311

15 Answers15

23

Your JAVA_HOME variable must be set to /usr/lib/jvm/java-6-openjdk and it must be available for the user that starts Jenkins.

From Kyle Strand comment:

As of April 2015 (I think), Jenkins requires Java7. Also note that the java binary path (JAVA) must be set to the correct version if the system default is still Java 6. Finally, for anyone wondering where these variables are set, it's in a config file listed with the installation instructions on the Jenkins webpage (e.g. for Debian it's /etc/default/jenkins).

RonU
  • 5,525
  • 3
  • 16
  • 13
Ernesto Campohermoso
  • 7,213
  • 1
  • 40
  • 51
  • 4
    As of April 2015 (I think), Jenkins requires Java7. Also note that the java binary path (`JAVA`) must be set to the correct version if the system default is still Java 6. Finally, for anyone wondering where these variables are set, it's in a config file listed with the installation instructions on the Jenkins webpage (e.g. for Debian it's `/etc/default/jenkins`). – Kyle Strand Jun 11 '15 at 00:49
9

Using Jenkins 2 (2.3.2 in my case), the right way seems to insert the following into your pipeline file:

env.JAVA_HOME="${tool 'jdk1.8.0_111'}"
env.PATH="${env.JAVA_HOME}/bin:${env.PATH}"

"jdk1.8.0_111" beeing the name of the java configuration initially registered into Jenkins

user1767316
  • 3,276
  • 3
  • 37
  • 46
  • This is in line with the Cloudbees recommendation as well: https://support.cloudbees.com/hc/en-us/articles/204421664-Select-which-Java-JDK-to-use-in-Pipeline – Vijay Ramaswamy Jan 16 '19 at 18:24
  • Is there anyway to retrieve the java home from the tool using it's name outside of pipelines as well? E.g. in a freestyle job. – BlackEye Feb 18 '20 at 12:55
6

On CentOS 6.x and Redhat 6.x systems, the openjdk-devel package contains the jdk. It's sensible enough if you are familiar with the -devel pattern used in RedHat, but confusing if you're looking for a jdk package that conforms to java naming standards.

Mike Lococo
  • 61
  • 1
  • 1
6

I was facing the same issue and for me downgrading the JAVA_HOME from jdk12 was not the plausible option like said in the answer. So I did a trial and error experiment and I got the Jenkins running without even downgrading the version of JAVA_HOME.

Steps:

  • open configuration $ sudo vi /etc/init.d/jenkins
  • Comment following line:
 #JAVA=`type -p java`
  • Introduced the line mentioned below. (Note: Insert the specific path of JDK in your machine.)
 JAVA=`type -p /usr/lib/jdk8/bin/java`
  • Reload systemd manager configuration: $ sudo systemctl daemon-reload
  • Start Jenkins service: $ sudo systemctl start jenkins
    ● jenkins.service - LSB: Start Jenkins at boot time
       Loaded: loaded (/etc/init.d/jenkins; generated)
       Active: active (exited) since Sun 2020-05-31 21:05:30 CEST; 9min ago
         Docs: man:systemd-sysv-generator(8)
      Process: 9055 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)
    
ViV
  • 307
  • 2
  • 10
5

I just wanted to add a solution for Windows machines.

  • Windows Server 2008 R2 Standard, SP1
  • Jenkins 2.89.4
  • Java version 8.171

Symptom: Jenkins service starts and immediately stops.
Jenkins.wrapper.log has a line indicating the incorrect path to Java:

- Starting C:\Program Files\Java\jre1.8.0_141\bin\java -Xrs -Xmx6g -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "C:\Program Files (x86)\Jenkins\jenkins.war" --httpPort=8080 --webroot="C:\Program Files (x86)\Jenkins\war"

The fix: Jenkins has the path hard-coded in jenkins.xml. Change the path to the new Java location.

<env name="JENKINS_HOME" value="%BASE%"/>
<!--
if you'd like to run Jenkins with a specific version of Java, specify a full path to java.exe.
The following value assumes that you have java in your PATH.
-->
<executable>C:\Program Files\Java\jre1.8.0_171\bin\java</executable>
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

You can also use Windows Environment Variables, but I wasn't successful with that and I don't think the Java installer updates those, so you'd need to update that by hand every time anyway.

<env name="JENKINS_HOME" value="%BASE%"/>
<!--
if you'd like to run Jenkins with a specific version of Java, specify a full path to java.exe.
The following value assumes that you have java in your PATH.
-->
<executable>%JAVA_HOME%\bin\java</executable>
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>
Barry MSIH
  • 3,525
  • 5
  • 32
  • 53
BClaydon
  • 1,900
  • 2
  • 20
  • 34
3

openjdk-6 is a Java runtime, not a JDK (development kit which contains javac, for example). Install openjdk-6-jdk.

Maven also needs the JDK.

[EDIT] When the JDK is installed, use /usr/lib/jvm/java-6-openjdk for JAVA_HOME (i.e. without the jre part).

Aaron Digulla
  • 321,842
  • 108
  • 597
  • 820
  • that was a typo in the question, I installed the full jdk (javac works). Also mvn works outside of jenkins. – NimChimpsky Nov 18 '11 at 16:40
  • At first I thought "oh, c'mon, there is a needed jdk folder there", but a suggested installation probably helped as I didn't have all the needed jdk stuff. – John Doe Jun 19 '12 at 20:43
2

This is an old thread but for more recent Jenkins versions (in my case Jenkins 2.135) that require a particular java JDK the following should help:

Note: This is for Centos 7 , other distros may have differing directory locations although I believe they are correct for ubuntu also.

Modify /etc/sysconfig/jenkins and set variable JENKINS_JAVA_CMD="/<your desired jvm>/bin/java" (root access require)

Example:

JENKINS_JAVA_CMD="/usr/lib/jvm/java-1.8.0-openjdk/bin/java"

Restart Jenkins (if jenkins is run as a service sudo service jenkins stop then sudo service jenkins start)

The above fixed my Jenkins install not starting after I upgraded to Java 10 and Jenkins to 2.135

CertainPerformance
  • 356,069
  • 52
  • 309
  • 320
D Turner
  • 35
  • 7
2

For those of you coming to this issue and have access to configure your Jenkins Agents, you can set the JAVA_HOME from the Jenkins > Nodes > "the agent name" > Configure page:

Setting "per agent" environment variables

cstroe
  • 3,740
  • 3
  • 27
  • 16
  • I am facing the same issue related to JAVA_HOME. it gives me error like "'java' is not executable on Java_Home or Path". How can we set the environment variable of Java_home from docker file on Jenkins? – Har devgun Jun 01 '20 at 04:20
1

After half of the day trying different solutions for running correct JDK version to start Jenkins service, following helped in my case on Ubuntu 20.04.

sudo gedit jenkins.service in /etc/systemd/system/multi-user.target.wants

Uncomment JAVA_HOME variable in jenkins.service file and set to your JDK directory (in my case /usr/local/bin/jdk-17.0.7)

Environment="JAVA_HOME=/usr/local/bin/jdk-17.0.7"

1

In case anyone has similar problems, I used the default sudo apt-get installs for the relevant packages and here are the correct settings:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

and

MAVEN_HOME=/usr/share/maven2
fracz
  • 20,536
  • 18
  • 103
  • 149
NimChimpsky
  • 46,453
  • 60
  • 198
  • 311
0

Upgrading from Ubuntu 10.0.4 to 12.0.4 we got wrong footed. We had a JDK installation configured (auto-configured?) pointing to /usr/lib/jvm/java-6-openjdk this no longer contained a JDK, Changing to /usr/lib/jvm/default-java fixed, and should make for a seamless java-7 upgrade.

So in answer to the question: do not specify JAVA_HOME on Ubuntu.

TimP
  • 925
  • 1
  • 8
  • 13
0

In Ubuntu 12.04 I had to install openjdk-7-jdk

then javac was working !

then I could use

/usr/lib/jvm/java-7-openjdk-amd64

as path and jenkins didn't complain anymore.
lutinwood
  • 91
  • 1
  • 3
0

Download package rpm package from http://pkg.jenkins-ci.org/redhat/ you can give additional java location like I have default 1.7 java in my system but I am using /opt/jdk1.8.0_60/bin/java for jenkins. Open jenkins startup script /etc/init.d/jenkins and add additional java here, I m case I have added /opt/jdk1.8.0_60/bin/java,

Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.

See http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html

candidates=" /opt/jdk1.8.0_60/bin/java

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
0

In Jenkins try setting JAVA_HOME to /usr/lib/jvm/java-6-openjdk

Casey
  • 12,070
  • 18
  • 71
  • 107
-2

i saw into Eclipse > Preferences>installed JREs > JRE Definition i found the directory of java_home so it's /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home

nizar ouerghi
  • 1,721
  • 2
  • 14
  • 12