java - Maven surefire environmentVariables 在一台机器上不起作用

标签 java maven maven-surefire-plugin

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
        <forkMode>always</forkMode>
        <environmentVariables>
            <project.target>${project.build.outputDirectory}</project.target>
            <project.version>${project.version}</project.version>
        </environmentVariables>
    </configuration>
</plugin>

然后我们使用 System.getenv("project.version"); 在测试中获取值,这在所有机器上都可以正常工作……除了一台机器。

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

$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

专家

$ mvn -version
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-1049-aws", arch: "amd64", family: "unix"

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

$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T07:58:13Z)
Maven home: /usr/share/maven
Java version: 1.8.0_161, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk1.8.0_161/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-1049-aws", arch: "amd64", family: "unix"

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

[DEBUG] Setting environment variable [project.version]=[4.0.0-SNAPSHOT]

然后我们通过 fork 执行测试:

[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  …-4.0.0-SNAPSHOT.jar  surefire-junit4-2.19.1.jar

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

然而 System.getenv("project.version"); 返回 null

最佳答案

我认为您需要改用 systemPropertyVariables。请参阅文档 here .

    <systemPropertyVariables>
        <project.target>${project.build.outputDirectory}</project.target>
        <project.version>${project.version}</project.version>
    </systemPropertyVariables>

关于java - Maven surefire environmentVariables 在一台机器上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49139636/

相关文章:

java - 当指定-javaagent时,是否可以有一个包含=(等于)的jarpath?

java - 给出字符串数值

java - 匹配可选值的正则表达式

java - 计算目录中 MP4 文件的总持续时间时出现 SLF4J 问题

java - 在pom.xml中添加org.springframework.boot依赖后如何导入@NotBlank

java - maven Surefire-junit47 未运行 JUnit4 测试

Java优先级队列实现——内存局部性

java - 如何使用 ObjectMapper 映射索引 JSON

java - 如何使用JPA制作Maven包,但独立于服务提供商;稍后如何由该包的用户插入我的服务提供商?

junit - 如何使用Maven surefire排除给定类别的所有JUnit4测试?