Mavenでビルドして実行するように構成されたプロジェクトがあります。プロジェクトはプラットフォーム固有のネイティブライブラリに依存しており、これらの依存関係を管理するためにここにある戦略を使用しています。
基本的に、特定のプラットフォームの.dll
or.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にあるものを上書きせずに、コマンドラインでいくつかのオプションの引数を指定するための最良の方法は何ですか?