web-dev-qa-db-ja.com

Mavenプロジェクトにシステムプロパティを指定する

Mavenプロジェクトでシステムプロパティを設定する方法はありますか?

テストとwebapp(ローカルで実行)からプロパティにアクセスしたいのですが、Javaシステムプロパティを使用できることがわかっています。

それを./settings.xmlまたはそのようなものに入れる必要がありますか?

状況

私はオープンソースプロジェクトを取り、JavaDBを使用するためにdb構成を変更することに成功しました

これで、JavaDBのjdbc URLで、データベースの場所をフルパスとして指定できました( this other question を参照)

またはシステムプロパティ:derby.system.home

コードはすでに動作していますが、現在はすべて次のようにハードコードされています:

 jdbc:derby:/Users/oscarreyes/javadbs/mydb

そして、私はフルパスを削除して、次のようにします:

 jdbc:derby:mydb

そのためには、システムプロパティ(derby.system.home)をmavenに指定する必要がありますが、その方法はわかりません。

テストはjunitを使用して実行され(pom.xmlにはプラグインが表示されません)、Webアプリはjettyプラグインで実行されます。

コマンドラインでシステムプロパティを指定するとjettyで機能するように見えますが、それが実用的なものであるかどうかはわかりません(他のユーザーがEclipse/idea /から実行できる場合は許可されます)

63
OscarRyz

Mavenプロジェクトでシステムプロパティを設定する方法はありますか?テストからプロパティにアクセスしたい[...]

Maven Surefire Plugin 構成でシステムプロパティを設定できます(デフォルトではテストがフォークされているため、これは理にかなっています)。から システムプロパティの使用

<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>

および私のwebapp(ローカルで実行)

ここで何を意味するのかはわかりませんが、webappコンテナはMavenによって起動されると仮定します。次を使用して、コマンドラインでシステムプロパティを渡すことができます。

mvn -DargLine="-DpropertyName=propertyValue"

更新:OK、今すぐ入手。 Jettyの場合、Maven Jettyプラグイン構成でシステムプロパティを設定することもできます。から システムプロパティの設定

<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>
70
Pascal Thivent

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>
63
yegor256

「スタンドアロン」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>
9
bvesco

テストとwebappが同じMavenプロジェクトにある場合、プロジェクトPOMでプロパティを使用できます。次に、特定のファイルをフィルタリングして、Mavenがそれらのファイルのプロパティを設定できるようにします。フィルタリングにはさまざまな方法がありますが、最も一般的なのはリソースフェーズ中です。 http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html

テストとwebappが異なるMavenプロジェクトにある場合、Windowsのmavenリポジトリフォルダー(C:\ Documents and Settings\username.m2)にあるsettings.xmlにプロパティを配置できます。プロパティをテストおよびwebappに読み込むには、フィルタリングまたは他の方法を使用する必要があります。

2
amram99