在Eclipse IDE中无法读取SystemPropertyVariable

时间:2018-11-07 08:30:51

标签: java eclipse maven junit

在ma maven项目中,pom.xml中的内容如下所示:

@GeneratedValue(strategy=GenerationType.IDENTITY)

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

如果我通过添加'-Denvironment = DEV'的控制台运行测试,就可以了。

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

这是对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上静态设置系统属性吗?

像这样:

  

窗口>首选项> Java>已安装的JRE> 选择您的JRE >   编辑...>默认VM参数:-DDEV