Maven 2 为Maven项目指定系统属性
有没有办法(我的意思是如何)在maven项目中设置系统属性 我想从我的测试和我的webapp(本地运行)访问一个属性,我知道我可以使用java系统属性 我应该把它放在./settings.xml或类似的东西中吗 上下文 我接受了一个开源项目,并设法将db配置更改为使用JavaDB 现在,在JavaDB的JDBCURL中,可以将数据库的位置指定为完整路径(请参阅:) 或系统属性:Maven 2 为Maven项目指定系统属性,maven-2,system-properties,Maven 2,System Properties,有没有办法(我的意思是如何)在maven项目中设置系统属性 我想从我的测试和我的webapp(本地运行)访问一个属性,我知道我可以使用java系统属性 我应该把它放在./settings.xml或类似的东西中吗 上下文 我接受了一个开源项目,并设法将db配置更改为使用JavaDB 现在,在JavaDB的JDBCURL中,可以将数据库的位置指定为完整路径(请参阅:) 或系统属性:derby.system.home 我已经有了代码,但目前它都是硬编码的: jdbc:derby:/Users/osc
derby.system.home
我已经有了代码,但目前它都是硬编码的:
jdbc:derby:/Users/oscarreyes/javadbs/mydb
我想删除完整路径,让它像:
jdbc:derby:mydb
为此,我需要将系统属性(derby.system.home
)指定给maven,但我不知道如何指定
测试使用junit(我在pom.xml中没有看到任何插件)执行,web应用程序使用jetty插件运行
在命令行中指定系统属性似乎对jetty有效,但我不确定这是否可行(允许其他一些用户可以从eclipse/idea/whatever运行)如果您的测试和webapp在同一个Maven项目中,您可以在项目POM中使用属性。然后,您可以过滤某些文件,这将允许Maven在这些文件中设置属性。有不同的过滤方法,但最常见的是在资源阶段- 如果测试和webapp位于不同的Maven项目中,则可以将该属性放入settings.xml中,该属性位于Windows上的Maven存储库文件夹(C:\Documents and settings\username.m2)中。您仍然需要使用筛选或其他方法将属性读入测试和webapp 有没有办法(我的意思是如何)在maven项目中设置系统属性?我想从测试中访问属性[…] 您可以在配置中设置系统属性(这是有意义的,因为默认情况下测试是分叉的)。发件人: 更新:好的,现在就知道了。对于Jetty,您还应该能够在Maven Jetty插件配置中设置系统属性。发件人:
...
...
org.mortbay.jetty
maven jetty插件
...
属性名称
财产价值
...
插件可能有助于:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<property>
<name>my.property.name</name>
<value>my.property.value</value>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
org.codehaus.mojo
属性maven插件
1.0.0
设置系统属性
我的.property.name
我的财产价值
我了解到,如果您正在使用“独立”java应用程序,那么使用exec maven插件也可以做到这一点
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>${maven.exec.plugin.version}</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${exec.main-class}</mainClass>
<systemProperties>
<systemProperty>
<key>myproperty</key>
<value>myvalue</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
org.codehaus.mojo
execmaven插件
${maven.exec.plugin.version}
JAVA
${exec.main类}
我的财产
我的价值观
我实际上需要它作为系统属性,这样我就可以执行System.getProperty(“myproperty”)代码>我可以在命令行中指定,但我不知道这是否是最好的方法。我会更新我原来的问题。同时+1@Oscar我现在明白了。正如我所写的,JUnit测试在分叉的VM中运行,因此您必须在surefire配置中设置系统属性。Maven Jetty插件提供了类似的配置工具。我建议两者都配置,这确实是一个比命令行更好的选项。我想每个人都可以像我一样读心术。。。(顺便说一句,别再想了!!!)。。。这非常有效。非常感谢。2019注:已折旧。使用systemPropertyVariables而不是systemProperties当我将测试转移到集成测试时,我遇到了完全相同的问题(刚刚重命名并添加了maven failsafe插件。此系统属性停止工作。我还必须将systemPropertyVariables从maven surefire插件移动到此maven failsafe插件中。在maven surefire插件中配置的系统属性在集成测试中被忽略。我不明白为什么会提到maven surefire插件。)与测试无关。它似乎与正常的开发/部署完全不同,我不理解两者的结合。大多数人认为maven只是为了测试。
<project>
...
<plugins>
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
...
<systemProperties>
<systemProperty>
<name>propertyName</name>
<value>propertyValue</value>
</systemProperty>
...
</systemProperties>
</configuration>
</plugin>
</plugins>
</project>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<property>
<name>my.property.name</name>
<value>my.property.value</value>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>${maven.exec.plugin.version}</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${exec.main-class}</mainClass>
<systemProperties>
<systemProperty>
<key>myproperty</key>
<value>myvalue</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>