java - Eclipse IDE 中未读取 SystemPropertyVariables

标签 java eclipse maven junit

在 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,以便它在我从控制台运行它时看到我的“环境”属性?

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

谢谢

最佳答案

这是对 Maven 工作方式的常见误解。

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

mvn test-compile

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

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

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

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

但是,由于有人可能认为 Eclipse 始终处于“DEV”模式,因此合适的解决方法是在 Eclipse 中静态设置 JRE 上的系统属性吗?

像这样:

Window > Preferences > Java > Installed JREs > select your JRE > Edit... > Default VM arguments: -DDEV

关于java - Eclipse IDE 中未读取 SystemPropertyVariables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53185804/

相关文章:

java - 如何在主java方法中添加额外的代码?

java - 使用 Java 增强 C++ Eclipse

java - 如何在eclipse中导入maven EJB项目? (无 m2e)

java - 如何使用 Java Swing 实现可拖动选项卡?

java - GWT RPC - 每个应用程序多个 RPC 服务

java - 2 台计算机的文件共享。

maven - maven scm 连接器 subclipse 的替代品(不适用于 subclipse1.8)?

java - 将固定大小设置为 SWT 标签

java - 如何运行使用测试资源而不是主要资源的Java应用程序?

maven - 内部 Maven 存储库索引不会在 m2eclipse 中更新