为Maven项目指定系统属性

Osc*_*Ryz 63 maven-2 system-properties

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

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

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

上下文

我参加了一个开源项目并设法更改数据库配置以使用JavaDB

现在,在JavaDB的jdbc url中,可以将数据库的位置指定为完整路径(请参阅:此其他问题)

或系统属性: derby.system.home

我已经有了代码工作,但目前所有硬编码都是:

 jdbc:derby:/Users/oscarreyes/javadbs/mydb
Run Code Online (Sandbox Code Playgroud)

我想删除完整的路径,让它像:

 jdbc:derby:mydb
Run Code Online (Sandbox Code Playgroud)

要做到这一点,我需要将系统属性(derby.system.home)指定为maven,但我不知道如何.

测试是使用junit执行的(我在pom.xml中看不到任何插件),web应用程序使用jetty插件运行.

在命令行中指定系统属性似乎适用于jetty,但我不确定这是否实用(授予其他一些用户可以从eclipse/idea /中运行它)

Pas*_*ent 70

有没有办法(我的意思是如何)在maven项目中设置系统属性?我想从我的测试中访问一个属性[...]

您可以在Maven Surefire插件配置中设置系统属性(这是有道理的,因为默认情况下测试是分叉的).从使用系统属性:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <systemPropertyVariables>
            <propertyName>propertyValue</propertyName>
            <buildDirectory>${project.build.directory}</buildDirectory>
            [...]
          </systemPropertyVariables>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
Run Code Online (Sandbox Code Playgroud)

和我的webapp(在本地运行)

不确定你的意思,但我认为webapp容器是由Maven启动的.您可以使用以下命令在命令行上传递系统属性:

mvn -DargLine="-DpropertyName=propertyValue"
Run Code Online (Sandbox Code Playgroud)

更新:好的,现在就搞定了.对于Jetty,您还应该能够在Maven Jetty Plugin配置中设置系统属性.从设置系统属性:

<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>
Run Code Online (Sandbox Code Playgroud)


yeg*_*256 65

properties-maven-plugin插件可能会有所帮助:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么maven-surefire-plugin被提及用于与测试无关的东西.看起来它与正常开发/部署完全不同,我不理解这种混淆. (13认同)

小智 9

我已经了解到,如果你正在做一个"独立的"java应用程序,也可以使用exec-maven-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>
Run Code Online (Sandbox Code Playgroud)