Mavenでビルドして実行するように構成されたプロジェクトがあります。プロジェクトはプラットフォーム固有のネイティブライブラリに依存しており、見つかった戦略 here を使用してこれらの依存関係を管理しています。
基本的に、特定のプラットフォームの.dll
または.so
ファイルはjarにパッケージ化され、ターゲットプラットフォームを識別する分類子とともにMavenサーバーにプッシュされます。次に、maven-dependency-pluginはプラットフォーム固有のjarを解凍し、ネイティブライブラリをターゲットフォルダーにコピーします。
通常、私はmvn exec:Java
を使用してJavaプログラムを実行しますが、exec:Java
はMavenと同じJVMでアプリケーションを実行するため、クラスパスを変更できません。依存関係をクラスパスに追加する必要があります。代わりにmvn exec:exec
を使用する必要があります。これは、pomの関連するスニペットです。
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<executable>Java</executable>
<arguments>
<argument>-Djava.library.path=target/lib</argument>
<argument>-classpath</argument>
<classpath />
<argument>com.example.app.MainClass</argument>
</arguments>
</configuration>
</plugin>
...
これはアプリケーションのデフォルト設定では問題なく動作しますが、コマンドラインでいくつかのオプションパラメータを指定できるようにしたいと考えています。理想的には、私はこのようなことをしたいと思います:
mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>"
残念ながら、exec.args
変数を指定すると、pomにある引数(クラスパスを設定してアプリケーションを実行するために必要)が上書きされます。これを回避する方法はありますか? pomにあるものを上書きせずにコマンドラインでオプションの引数を指定する最良の方法は何ですか?
私は、Maven環境変数を使用して、私の問題に対するかなりエレガントな解決策を見つけることができました。
デフォルト値はpomのプロパティとして定義され、引数としてexecプラグインに追加されます。
...
<properties>
<argumentA>defaultA</argumentA>
<argumentB>defaultB</argumentB>
</properties>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<executable>Java</executable>
<arguments>
<argument>-Djava.library.path=${project.build.directory}/lib</argument>
<argument>-classpath</argument>
<classpath />
<argument>com.example.app.MainClass</argument>
<argument>-a</argument>
<argument>${argumentA}</argument>
<argument>-b</argument>
<argument>${argumentB}</argument>
</arguments>
</configuration>
</plugin>
...
これで、以前とまったく同じようにデフォルトのパラメーターで実行できます。
mvn exec:exec
そして、私はコマンドラインで各引数のデフォルトを簡単に上書きできます:
mvn exec:exec -DargumentA=alternateA -DargumentB=alternateB