1

我正在尝试添加buildnumbermaven 插件以包含hgchangeset来自 mercurial 的插件。在终端中运行时,这对我很有用(我在 Mac OSX 上)。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
      <execution>
        <phase>validate</phase>
        <goals>
          <goal>create</goal>
          <goal>hgchangeset</goal>  // The specific goal I'm interested in
          <goal>create-timestamp</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <doCheck>false</doCheck>
      <doUpdate>false</doUpdate>
      <revisionOnScmFailure>true</revisionOnScmFailure>
      <!-- format of the property 'buildNumber' -->
      <format>{0,date,MMdd-HHmm}</format>
      <items>
        <item>timestamp</item>
      </items>
    </configuration>
  </plugin>
</plugins>

但是,在 Eclipse 和 Jenkins 中运行时,出现此错误:

[INFO] EXECUTING: /bin/sh -c cd /Users/Shared/Jenkins/Home/jobs/proj/workspace && hg id -i
[ERROR] 
EXECUTION FAILED
  Execution of cmd : id failed with exit code: 127.
  Working directory was: 
    /Users/Shared/Jenkins/Home/jobs/proj/workspace
  Your Hg installation seems to be valid and complete.
    Hg version: NA (OK)

以用户“jenkins”身份登录到该服务器,我可以执行:hg id -i很好,我看到了正确的输出,因为hg二进制文件在我$PATH的服务器上,并且在控制台中被识别。

同样,Eclipse 提供相同的输出。我想这是因为在终端中,maven 构建可以看到我的hg二进制文件,/usr/local/bin但 Eclipse 和 Jenkins 不能。

有什么办法可以告诉 Mavenhg在那个位置使用吗?我不在乎它是否必须被硬编码,因为我们所有计算机上的二进制位置都是相同的。

提前致谢

echo $PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin

4

2 回答 2

1

查看 的代码buildnumber-maven-plugin,似乎无法为hg可执行文件提供前缀,或覆盖已构建的实际命令行。

因此,我建议修改 Jenkins 构建代理配置,以便调整PATH用于定位的hg. 您可以按照Jenkins Distributed Builds setup中的说明执行此操作- 通常(取决于您的构建从站的设置方式),您有几个选项:

  • 修改launch-slaveshell脚本
  • .profile为运行构建从属的用户修改(或等效)
  • 修改 Jenkins UI 中的代理配置,允许将环境变量传递给构建代理

其中任何一个都应该允许您调整PATH构建代理使用的内容。

祝你好运!

于 2013-04-10T00:35:09.300 回答
0

我在 eclipse 和 maven 中遇到了同样的问题 - 虽然我的终端报告了一个$PATH包含二进制文件的路径,但 eclipse 中的 maven-plugin 没有找到它。

我很快就意识到了问题:Eclipse 是从 UI 而不是终端启动的,所以它没有从终端继承环境变量,其中包括$PATH. 这可以通过从终端启动eclipse来快速测试

$./eclipse

现在,这个 Eclipse 实例中的 maven 能够找到二进制文件。

为了在从 UI 启动时获取 eclipse 的路径,您还需要将路径添加/etc/paths

于 2013-11-07T14:18:09.037 回答