windows - 在 Jenkins Windows 从节点上无法识别“mvn”命令

标签 windows maven jenkins

我正在尝试在 Jenkins Windows 从节点上构建一个 Java 项目,当我尝试运行任何 mvn 时来自 Jenkins 服务的从机上的命令,我收到一条错误消息,指出找不到该命令:

java.io.IOException: Cannot run program "mvn": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
...

注意:如果我直接登录机器,运行任何mvn命令工作得很好。

Windows 从属节点设置

Maven is installed to the directory D:\Apache\Maven.

Set system environment variables:

  • JAVA_HOME = C:\Program Files\Java\jdk1.8.0_40
  • M2 = %M2_HOME%\bin
  • M2_HOME = D:\Apache\Maven

The PATH system environment variable is set to %M2%;...

在 Jenkins 大师的网页上,如果我运行 Groovy 脚本 println System.getenv("PATH")在 Windows 从属节点上,我可以看到对于 Maven 的 bin 具有正确的扩展路径目录。

我还可以验证 Maven 的 bin可以通过运行以下命令查看目录:

Groovy Script: println "ls -al D:/Apache/Maven/bin".execute().text

total 14
drwxr-xr-x    8 D-AUN-00 Administ     4096 Apr 20 12:35 .
drwxr-xr-x    9 D-AUN-00 Administ     4096 Mar 31 11:46 ..
-rw-r--r--    1 D-AUN-00 Administ      230 Mar 31 11:46 m2.conf
-rwxr-xr-x    1 D-AUN-00 Administ     7085 Apr 20 11:49 mvn
-rw-r--r--    1 D-AUN-00 Administ     6007 Mar 31 11:46 mvn.cmd
-rwxr-xr-x    1 D-AUN-00 Administ     1796 Mar 31 11:46 mvnDebug
-rw-r--r--    1 D-AUN-00 Administ     1513 Mar 31 11:46 mvnDebug.cmd
-rwxr-xr-x    1 D-AUN-00 Administ     1843 Mar 31 11:46 mvnyjp

奇怪的是,如果我用 mvn.cmd 运行 Maven ,然后 Maven 运行得很好:

Groovy Script: println "mvn.cmd --version".execute().text

Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-13T15:10:27-05:00)
Maven home: D:\Apache\Maven
Java version: 1.8.0_40, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_40\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "dos"

问题:是否有我遗漏或未正确设置的东西会导致 mvn命令不被识别?


编辑: 我正在运行的构建使用自定义 Python bash 脚本来调用 Maven。该脚本还设置为运行其他语言(PHP、Ruby、.NET、Node)项目的构建,并且这些构建的工具都可以正常工作(composerbundledevenv.com)。但是,我认为如果从属节点的脚本控制台在尝试运行 mvn 时返回相同的错误,那么构建的执行方式无关紧要。命令。


编辑 2: 我对此研究得越多,就越觉得这与 Jenkins 没有任何关系,而更多地与 shell 脚本在 Windows 上的执行方式有关。当我使用脚本控制台在从属节点上调用 Groovy 脚本时,Jenkins 只是将其写入从属节点上的临时文件并使用 sh -xe <script>调用它。当我直接在 Windows 机器上尝试类似的方法时,每个基于脚本的命令(例如 mvncomposer)都无法从 shell 脚本中运行,除非我在命令前加上 sh。 .这很不幸,因为我正在运行的脚本将来可能会在 Linux 或 Mac 节点上运行,我不想在其中乱扔特定于 Windows 的命令。我已经用 Git Bash 和 Msysgit 试过了,我得到了相同的结果。接下来,我将尝试使用 Cygwin 看看是否可行...

最佳答案

maven 安装文件夹在 Jenkins master 和 client 上应该相同。检查主从上的文件夹位置是否相同。

除此之外,您的环境。属性是正确的,但请检查您是否在用户或系统属性下添加了属性。如果您已在用户下添加属性并将 Jenkins 从站作为 Windows 服务启动,我认为 Jenkins 不会获取这些值。

关于windows - 在 Jenkins Windows 从节点上无法识别“mvn”命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757511/

相关文章:

windows - 为什么回显到 Windows PowerShell 中的主机文件会在字符之间创建空格?

windows - Windows 7 上的 DataSnapXE2 正常断开连接

windows - 创建 MSI 的简单工具

maven - spring-boot-maven-plugin,mvn 发布 :prepare not committing changes to pom. xml

jenkins - 无法在Gradle项目中加载资源

javascript - Jenkins 在 docker、工作区位置

c++ - unsigned long 和 UINT64 的区别

java - 无法在 Maven 上执行项目目标

eclipse - Maven命令提示符运行tomcat Debug模式(Eclipse)

jenkins - Post-build Actions 部分看不到注入(inject)的环境变量