java - 当我在 Jenkins 上发布时,为什么我的测试看不到我的系统属性?

标签 java maven jenkins maven-release-plugin

我编写了一些单元测试代码,打印出名为“JENKINS_BUILD”的 System.property 的值。当我在本地运行这些命令时,此属性具有一个值:

mvn --batch-mode test -DJENKINS_BUILD=true
mvn test -DargLine="-DJENKINS_BUILD=true"
etc.

但无论我做什么,当测试在 Jenkins 上运行时,我都无法将此属性纳入测试中。这是我在那里使用的命令行选项:

mvn -DargLine="-DJENKINS_BUILD=true" --batch-mode -Dresume=false release:prepare release:perform

略有不同,但我不明白为什么这很重要。为什么 System.getProperty("JENKINS_BUILD") 在 Jenkins 上为 null,但在我的本地环境中为“true”?这与使用 release:prepare release:perform 有关系吗?

I think this is basically the same question ,但我不确定。不同之处在于他试图将参数传递到发布插件中,而我试图将它们传递到 Surefire 插件中。另外,我想在命令行中定义该值,而不必更改我的 pom.xml。有办法做到这一点吗?

FWIW,我链接到的解决方案确实有效。

最佳答案

请注意,如果您没有 fork JVM,则会找到您在 maven 命令行中设置的属性;但是,如果您确实派生了 JVM,则需要将属性复制到派生的 JVM 的参数列表中。

我猜测您正在 fork 构建的某些方面,但没有传递新的argline,或者传递的新argline不会从启动(设置)属性复制必要的值。

这可能意味着您可能需要设置一个默认(空)属性,以使您的精氨酸配置在设置参数和未设置参数的情况下都正确。这就是您的链接中的第二个“示例”(Sander Verhagen 的示例)所详细说明的内容,即使它没有明确说明原因。

至于为什么在 maven-release-plugin 中经常遇到这种情况,请记住,在 maven-release-plugin 期间,您有一个“父”maven 进程驱动两个完整的嵌套 maven 构建。未能将参数传递给子级构建将意味着子级运行时没有所需的参数(因为它们只是父级 Activity 的参数,而不是用于构建发布版本和下一个快照版本的两个 Maven 运行。

关于java - 当我在 Jenkins 上发布时,为什么我的测试看不到我的系统属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29088735/

相关文章:

catch 子句之后的 java wait() 语句

Eclipse m2e多模块项目 checkout 并转换为maven

jenkins - 如何在Jenkins的 "Execute Windows Batch Command"中串联添加多个命令

jenkins - 不应该使用 Artifactory 来捕获 Jenkins 生成的构建 Artifactory 吗?

java - 在不重启 JVM 的情况下在 JAVA 中重新加载 Kerberos 配置

java - 如何在 Spring 中编写仅通过另一个 API 发送响应的 REST 端点?

java - 如何在 Maven 模块之间共享 protobuf 文件?

ios - Jenkins 与 Git 和 XCode : cannot pull sub-sub-module?

Java AudioInputStream如何支持跳过负字节数

java - 错误 : java. lang.ClassNotFoundException : org. apache.mahout.common.RandomWrapper