从 Hudson 传递 Maven 调试标志

Posted

技术标签:

【中文标题】从 Hudson 传递 Maven 调试标志【英文标题】:Passing the Maven Debug Flag from Hudson 【发布时间】:2011-04-22 23:29:14 【问题描述】:

我在使用 hudson 的 maven 构建时遇到问题。如果我可以看到传入了 -X 标志的 maven 输出,这个问题将相当容易解决。但是我找不到这样做的方法。如果我在作业配置的“构建”部分的“目标和选项”字段中指定“-X”,我的控制台输出看起来与我根本没有通过“-X”标志完全相同。调试日志是否在其他地方?或者我需要通过其他方式传递“-X”标志吗?

更新:

这不起作用的原因是因为构建在 hudson 过程的“解析 POM”部分失败,然后才真正启动真正的 Maven 构建并传入我在项目中指定的任何参数。因此,我真正需要的是一种在 hudson 的 maven 构建的“解析 POM”部分期间获得更好日志记录的方法。

【问题讨论】:

【参考方案1】:

帮助文本中是这么说的。

指定要执行的目标,例如 作为“全新安装”或“部署”。这 字段也可以接受任何其他 Maven 的命令行选项,例如 “-e”或“-Dmaven.test.skip=true”。

我也会把它放在那里的。

maven 帮助给了我以下两个选项:

 -X,--debug                    Produce execution debug output
 -e,--errors                   Produce execution error messages

也许你可以试试 --debug 或 -e 开关

【讨论】:

我以前试过这个(然后又试了一次),但没有得到额外的输出。似乎它应该工作,但它不是。如果我直接从命令行使用 -X 或 --debug 运行相同的构建,我会得到很多额外的信息。但是,我要解决的特定问题仅在从 hudson 运行构建时才会发生。 添加一个额外的构建步骤(批处理或 shell 脚本)并运行 set 命令。将输出与从命令行手动发出的 set 命令的输出进行比较。这可以帮助您查看 Hudson 看到的环境变量和您的命令行环境变量之间是否存在差异。路径变量在某些情况下具有巨大的影响。 -- 我希望我的假设是正确的,即您使用与 Hudson 相同的用户帐户运行命令行测试。【参考方案2】:

在 Jenkins 中,我认为 Hudson 也是如此,命令行参数可以在“目标”设置中传递给 Maven。我能够通过将 -X 参数添加到“目标”的开头来传递它。

-X package install

Jenkins 显然盲目地将此设置附加到 mvn 命令行的末尾。

【讨论】:

【参考方案3】:

我对 Hudson 1.398(Maven 2.0.10,jdk 1.6.0_07)有完全相同的问题:在解析 pom 文件期间构建失败。它可以在本地运行,也可以在从 Hudson 工作区手动启动时运行。

该构建需要设置一个环境变量(用于模块的路径),但该环境变量似乎没有从 Hudson 传播到 Maven。所以,和你一样,我也尝试使用 -X 选项从 Maven 获取更多详细信息,但它似乎也没有被传播。

【讨论】:

以上是关于从 Hudson 传递 Maven 调试标志的主要内容,如果未能解决你的问题,请参考以下文章

混合 STL 调试/发布库

在 C 中使用 makefile 标志进行调试

即使使用 -g 标志编译,gdb 中也没有调试符号

如何从 Maven 命令行远程调试 Java 应用程序

从Eclipse中的Maven项目调试Junit测试

C++ VS 调试代码,设置你自己的调试标志