23

Mavenでビルドして実行するように構成されたプロジェクトがあります。プロジェクトはプラットフォーム固有のネイティブライブラリに依存しており、これらの依存関係を管理するためにここにある戦略を使用しています。

基本的に、特定のプラットフォームの.dllor.soファイルはjarにパッケージ化され、ターゲットプラットフォームを識別する分類子とともにMavenサーバーにプッシュされます。次に、maven-dependency-pluginは、プラットフォーム固有のjarを解凍し、ネイティブライブラリをターゲットフォルダーにコピーします。

通常、私はmvn exec:javaJavaプログラムを実行するために使用しますが、exec:javaMavenと同じ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にあるものを上書きせずに、コマンドラインでいくつかのオプションの引数を指定するための最良の方法は何ですか?

4

2 に答える 2

53

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
于 2013-03-04T18:40:32.107 に答える