Maven Surefire 环境变量无法在一台机器上运行

Woj*_*tek 6 java maven maven-surefire-plugin

背景:我们将当前项目版本设置为系统环境:

\n\n
<plugin>\n    <groupId>org.apache.maven.plugins</groupId>\n    <artifactId>maven-surefire-plugin</artifactId>\n    <version>2.19.1</version>\n    <configuration>\n        <forkMode>always</forkMode>\n        <environmentVariables>\n            <project.target>${project.build.outputDirectory}</project.target>\n            <project.version>${project.version}</project.version>\n        </environmentVariables>\n    </configuration>\n</plugin>\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我们在测试中使用该值System.getenv("project.version");,这在除一台机器之外的所有机器\xe2\x80\xa6 上都运行良好。

\n\n

有问题的机器是带有 Ubuntu 16.04 LTS 的新 AWS EC2 实例。设置和配置看起来没问题。我检查了 OpenJDK 和 OracleJDK 的最新版本,我还检查了包含的 java 和 maven 版本:

\n\n
$ java -version\nopenjdk version "1.8.0_151"\nOpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)\nOpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)\n
Run Code Online (Sandbox Code Playgroud)\n\n

行家

\n\n
$ mvn -version\nApache Maven 3.3.9\nMaven home: /usr/share/maven\nJava version: 1.8.0_151, vendor: Oracle Corporation\nJava home: /usr/lib/jvm/java-8-openjdk-amd64/jre\nDefault locale: en_US, platform encoding: UTF-8\nOS name: "linux", version: "4.4.0-1049-aws", arch: "amd64", family: "unix"\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及可供下载的最新版本:

\n\n
$ mvn --version\nApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T07:58:13Z)\nMaven home: /usr/share/maven\nJava version: 1.8.0_161, vendor: Oracle Corporation\nJava home: /usr/lib/jvm/jdk1.8.0_161/jre\nDefault locale: en_US, platform encoding: UTF-8\nOS name: "linux", version: "4.4.0-1049-aws", arch: "amd64", family: "unix"\n
Run Code Online (Sandbox Code Playgroud)\n\n

而且这个问题仍然存在。奇怪的是,分叉已启用(必需)并且日志条目显示正在设置变量:

\n\n
[DEBUG] Setting environment variable [project.version]=[4.0.0-SNAPSHOT]\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我们通过分叉进行测试执行:

\n\n
[DEBUG] boot(compact) classpath:  surefire-booter-2.19.1.jar  surefire-api-2.19.1.jar  test-classes  classes  junit-4.10.jar  hamcrest-core-1.1.jar  \xe2\x80\xa6-4.0.0-SNAPSHOT.jar  surefire-junit4-2.19.1.jar\n
Run Code Online (Sandbox Code Playgroud)\n\n

分叉命令行:/bin/sh -c cd /mnt/ebsVolume/

\n\n

但仍System.getenv("project.version");返回 null

\n

ilo*_*ner 5

我认为您需要改用systemPropertyVariables请参阅此处的文档。

    <systemPropertyVariables>
        <project.target>${project.build.outputDirectory}</project.target>
        <project.version>${project.version}</project.version>
    </systemPropertyVariables>
Run Code Online (Sandbox Code Playgroud)

  • 好的,我将其标记为已接受的解决方案,因为它解决了我的问题,但是我认为仍然可以使用 `environmentVariables` 并且它们应该可以工作 - Maven 中的错误? (2认同)