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 /から実行できる場合は許可されます)
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>
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>
「スタンドアロン」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>
テストと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に読み込むには、フィルタリングまたは他の方法を使用する必要があります。