我刚刚设置了一个运行 Windows Server 2012 的新 Jenkins 代理。我已经安装了 jdk-8u221-windows-x64 并设置了 Java_home,路径如下
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
但是,在此代理中运行的构建作业总是抱怨:
此环境不提供编译器。也许您正在 JRE 而不是 JDK 上运行
知道可能是什么原因造成的吗?
2019年9月11日更新
在作业构建配置中,我在 JDK 选项中选择了(系统)。如果我选择 JDK 8 update 221,则此构建作业会成功运行,但我想使用将从该节点中的环境变量获取的(系统)JDK,因此我可以切换到另一个代理节点,而无需更改 JDK 选项。
但是,当我远程到该服务器并打开命令提示符时,转到该项目的工作区文件夹,比方说:C:\jenkins_slave\workspace\project01,然后键入命令:mvn clean install,它运行时不会抱怨jdk 或 jre 从 Jenkins 运行。
您可以根据适合您的方式使用以下任何一种方法:
方法1)
请按照以下步骤配置您的 Windows 节点,使其指向您要使用的 JDK:
转到
Manage Jenkins
> Global Tool Configuration
> JDK > Add JDK
由于您已经安装了 Java,因此取消选中该框
Install automatically
在
Name
部分,只需提供一些有意义的标识符,不一定是JAVA_HOME
。现在,在 JAVA_HOME
文本框中,您可以提供任何您想要的值,因为无论如何您都会为 Windows 节点使用不同的值。现在转到
Manage Jenkins
> Manage Nodes
>(转到 Windows 节点的 Configure
部分)> Node Properties
现在启用显示
Tool Locations
的复选框。单击 Add
> 从下拉列表中,选择您在 Global Tool Configuration
部分中提供给 JDK 的名称
现在您必须提供 Windows 节点的 JAVA_HOME 路径。因此,无论它在哪里,只需在
Home
文本框中提及该路径,如下所示:方法2)
转至
Manage Jenkins
> Manage Nodes
>(转至 Windows 节点的 Configure
部分)> Node Properties
现在启用显示
Environment variables
> Add
的复选框
Name
文本框中,写入 Path
(而不是 PATH
)Value
文本框中,写入您的JDK安装路径,直到bin
,如下所示。根据您的情况,添加以下内容:
C:\Program Files\Java\jdk1.8.0_221\bin;C:\Windows\System32;C:\maven-3.6.1\bin;%PATH%
我没有在 PATH 中设置 Maven,所以我将其添加到 Node 的配置中,如上所示。
注意:在
Value
文本框中,使用分号(;)作为分隔符,而不是逗号(,)
作业的 JDK 配置:
工作的命令:
作业的输出:
方法3)
在 Windows 节点的配置中,启用
Environment variables
并使用 relevant 值添加以下变量
姓名:
java.home
价值:
C:\Program Files\Java\jdk1.8.0_221\jre
注:是
java.home
(都是小写字母如下图)
JAVA_HOME
需要指向JDK安装(maven需要tools.jar
),但Maven实际上使用JDK中的JRE来运行自身。
使用
mvn -version
时,Maven 使用 Java 的内部 java.home
属性。此属性与 JAVA_HOME
环境设置不同,因此它可能会欺骗您。它实际上是一个动态属性,显示哪个 JRE 正在运行您的代码。