与在命令行中设置环境变量相比,是否可以在构建配置文件中设置环境变量?
例如,当我使用测试环境(-Denv = test)时,我想启用调试器。
我希望Maven做到这一点:
export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"
这样,我可以快速附加调试器,而不必一遍又一遍地键入相同的重复行。
我不相信这种情况下对我有帮助:
<plugin>
...
<!-- Automatically enable the debugger when running Jetty -->
<argLine>-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n</argLine>
</configuration>
...
</plugin>
沃尔特
最佳答案
在最新版本的Maven中,您可以通过运行 mvnDebug 而不是 mvn 来激活调试器,mvnDebug bat / sh文件设置MVN__DEBUG_OPTS并将它们传递给java.exe。传递的值是:
set MAVEN_DEBUG_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
如果这还不够,那么这可能会起作用(请注意,我尚未对此进行测试,如果有,我会进行更新)。 Maven读取以“env”为前缀的属性。从环境中,您可以通过在其前面加上前缀来设置环境变量。即:
<profile>
<id>dev</id>
<properties>
<env.MAVEN_OPTS>-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000<env.MAVEN_OPTS>
</properties>
</profile>
更新:surefire插件允许您在测试执行期间使用specify system properties。配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<systemProperties>
<property>
<name>propertyName</name>
<value>propertyValue</value>
</property>
</systemProperties>
</configuration>
</plugin>
如果这些都不适合您,则可以编写一个在配置文件中配置的小插件,该插件绑定到初始化阶段并设置变量。该插件将具有以下配置:
<plugin>
<groupId>name.seller.rich</groupId>
<artifactId>maven-environment-plugin</artifactId>
<version>0.0.1</version>
<executions>
<execution>
<id>set-properties</id>
<phase>initialize</phase>
<goals>
<goal>set-properties</goal>
</goals>
</execution>
</executions>
<configuration>
<properties>
<env.MAVEN_OPTS>-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000<env.MAVEN_OPTS>
</properties>
</configuration>
</plugin>
在执行期间,插件将使用System.setProperty()设置每个传递的属性。如果前两个不合适或不起作用,这应该可以解决您的问题。