在IntelliJ中将-D Java选项传递给mvn安装没有效果,传递属性会有效果-为什么?

在IntelliJ中将-D Java选项传递给mvn安装没有效果,传递属性会有效果-为什么?,java,maven,intellij-idea,Java,Maven,Intellij Idea,javaman页面指定 java [options] classname [args] 及 标准选项 -Dproperty=value设置系统属性值。属性变量是一个字符串,不包含表示属性名称的空格。 value变量是一个字符串,表示 财产。如果值是带空格的字符串,则将其括在 引号(例如-Dfoo=“foo bar”) 当我在IntelliJ中配置Maven时(首选项>构建、执行、部署>构建工具>Maven>Runner),它允许我设置 虚拟机选项 环境变量 性质 添加属性时,会弹出一个对

java
man
页面指定

java [options] classname [args]

标准选项

-Dproperty=value设置系统属性值。属性变量是一个字符串,不包含表示属性名称的空格。 value变量是一个字符串,表示 财产。如果值是带空格的字符串,则将其括在 引号(例如
-Dfoo=“foo bar”

当我在IntelliJ中配置Maven时(首选项>构建、执行、部署>构建工具>Maven>Runner),它允许我设置

  • 虚拟机选项
  • 环境变量
  • 性质
添加属性时,会弹出一个对话框,允许我“添加Maven属性”

从上面的
java
man
页面摘录判断,我希望IntelliJ将属性键值对转换为
-Dkey=value
选项

然而,当maven由IntelliJ运行时,控制台输出的第一行基本上归结为:

/path/to/java
 -Dvm=option
 -classpath /path/to/apache-maven/boot/plexus-classworlds-2.5.2.jar
org.codehaus.classworlds.Launcher
 -Dproperty=value
install -P selectedProfiles
i、 e.
java选项类名称更多选项和主题

由此看来,IntelliJ将属性作为参数添加到类中(huh?),而VM选项作为选项传入(如预期的那样)

现在,在单元测试中,我添加了

Properties properties = System.getProperties();
properties.list(System.out);
它只打印
property=value
,而不打印
jvm=option


为什么VM选项(在IntelliJ中设置)没有传递到我的测试中,为什么属性(似乎是IntelliJ作为参数传递的)一直传递到单元测试级别?为什么在IntelliJ的Add对话中它被称为“Maven属性”,而不是系统属性?(这是观察到的行为的原因的线索吗?

您的测试与Maven不在同一个JVM中运行。由Maven启动以运行测试的JVM不会继承传递给Maven JVM的VM选项(这是预期的,也是设计要求的)。