首页 > 解决方案 > Eclipse IDE 中未读取 SystemPropertyVariable

问题描述

在 ma maven 项目中,我在 pom.xml 中有类似下面的内容

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
    <systemPropertyVariables>
        <environment>DEV</environment>
    </systemPropertyVariables>
    </configuration>
</plugin>

当然,我在我的 Java 代码中使用了这个属性。但是我的问题是,如果我在 Eclipse 中运行测试,则不会从 pom 文件中读取此属性,最后我的“环境”属性保持为空。

如果我从控制台运行我的测试并添加“ -Denvironment=DEV ”,那就没问题了。

我的问题是如何配置 Eclipse,以便在我从控制台运行它时,它可以看到我的“环境”属性?

有人可以帮忙吗?我自己找不到解决办法...

谢谢

标签: javaeclipsemavenjunit

解决方案


这是对 Maven 工作原理的常见误解。

Maven 的核心定义了构建生命周期,本质上是一个状态机,告诉它如何转换到给定的阶段。例如,如果您运行:

mvn test-compile

Maven 知道它首先需要通过一系列步骤(状态)才能执行test-compile。考虑到 POM 的编写方式,这些状态中的每一个都可能附加也可能没有附加插件,Maven 将执行该插件。所以本质上,Maven 本身不做任何资源复制、编译、测试、打包等工作。所有这些任务都委托给插件。

当您将 Maven 项目导入 Eclipse 时,出于各种原因,它将提供自己的插件映射。其中一些(如编译)对 IDE 来说是有意义的,它将使用自己的插件来完成这项工作。不属于 Eclipse 正常工作的其他阶段(例如打包)将没有映射,因此没有要执行的插件。

运行 JUnit 测试并不是 Eclipse 在构建过程中通常所做的,所以这就是您手动运行 JUnit 测试的原因(右键单击测试类> 运行方式 > JUnit 测试)。Eclipse 只是忽略了surefire插件,因为它使用自己的内部 JUnit 运行程序来运行测试,因此它不会从surefire插件中获取配置。

我毫不怀疑这可以在 Eclipse 中工作,但在撰写本文时,它根本没有。您是否尝试过 IntelliJ?

但是,由于有人可能会争辩说 Eclipse 始终处于“DEV”模式,那么合适的解决方法是在 Eclipse 中静态设置 JRE 上的系统属性吗?

像这样:

Window > Preferences > Java > Installed JREs >选择您的 JRE > Edit... > 默认 VM 参数:-DDEV


推荐阅读