Maven 2 为Maven项目指定系统属性

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

有没有办法(我的意思是如何)在maven项目中设置系统属性

我想从我的测试和我的webapp(本地运行)访问一个属性,我知道我可以使用java系统属性

我应该把它放在./settings.xml或类似的东西中吗

上下文

我接受了一个开源项目,并设法将db配置更改为使用JavaDB

现在,在JavaDB的JDBCURL中,可以将数据库的位置指定为完整路径(请参阅:)

或系统属性:
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>