I just setup a new Jenkins agent which is running Windows server 2012. I already installed jdk-8u221-windows-x64 and set Java_home, Path like below
C:\Users\Administrator>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_221\
C:\Users\Administrator>echo %PATH%
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\
Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\
Program Files\Amazon\cfn-bootstrap\;C:\Program Files\Git\cmd;C:\Program Files\Ja
va\jdk1.8.0_221\\bin;C:\maven\bin;C:\maven\bin
However,build job running in this agent always complain that:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
Any idea of what might be causing this?
Update Sep 11th, 2019
I configure the agent node as method 2 of Technext's suggestion
In a Job build configuration, I selected (System) in JDK option. If I choose JDK 8 update 221, this build job run successfully, but I want to use a (System) JDK which will get from environment variable in this node, so I can switch to another agent node without changing the JDK option.
However, when I remote to this server, and open command prompt, move on to workspace folder of this project, let say: C:\jenkins_slave\workspace\project01, then type the command: mvn clean install, it run without complain about jdk or jre as run from Jenkins.
You may use any of these methods depending on what suits you:
Method 1)
Please configure your Windows' Node to point it to the JDK you want to use by following these steps:
Go to Manage Jenkins
> Global Tool Configuration
> JDK > Add JDK
Since you already have Java installed, uncheck the box Install automatically
In Name
section, just provide some meaningful identifier, not necessarily JAVA_HOME
. Now in the JAVA_HOME
text box, you can provide any value that you wish because you are anyways going to use a different value for your Windows node.
Now go to Manage Jenkins
> Manage Nodes
> (Go to Configure
section of your Windows node) > Node Properties
Now enable the check-box that says Tool Locations
. Click Add
> From the drop-down, select the name you provided to your JDK in Global Tool Configuration
section
Now here you have to provide the JAVA_HOME path for your Windows node. So wherever it is, just mention that path in the Home
text box as shown below:
Method 2)
Go to Manage Jenkins
> Manage Nodes
> (Go to Configure
section of your Windows node) > Node Properties
Now enable the check-box that says Environment variables
> Add
Name
text box, write Path
(not PATH
)Value
text box, write the path of your JDK installation till bin
as shown below.In your case, add the following: C:\Program Files\Java\jdk1.8.0_221\bin;C:\Windows\System32;C:\maven-3.6.1\bin;%PATH%
I was not having Maven set in PATH so i added it to Node's configuration as shown above.
Note: In the Value
text box, use semi-colon (;) as separator not comma (,)
Job's JDK config:
Job's command:
Job's output:
Method 3)
In your Windows Node's configuration, enable Environment variables
and add below variable with the relevant value
Name: java.home
Value: C:\Program Files\Java\jdk1.8.0_221\jre
Note: It's java.home
(all in small letters as shown below)
JAVA_HOME
needs to point to a JDK installation (maven needs the tools.jar
) but Maven actually uses the JRE within the JDK to run itself.
When using mvn -version
, Maven uses Java's internal java.home
property. This property is not the same thing as JAVA_HOME
environment setting so it might fool you. It is actually a dynamic property showing you which JRE is running your code.
Ref: Java_home in Maven