5

私はこれについて約 1 時間壁に頭をぶつけていました。単純なプロパティ ( java.library.path) を exec-maven-plugin に渡そうとしています。目標は、Netbeans の右クリック ファイル > ファイルの実行手順と統合することです。

だから私は私のPOMを次のように設定しました:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1.1</version>
            <configuration>
                <environmentVariables>
                    <java.library.path>native/win32-x86</java.library.path>
                </environmentVariables>
            </configuration>
        </plugin>
    </plugins>
</build>

(私は実行引数を見ることができるように古いバージョンを使用していますが、1.2 で完全に再現可能です)

次に、ファイルを右クリックし、[ファイルの実行] をクリックします。Netbeans は次のプロセスを開始します。

 W:\programming\apache-maven-2.2.1\bin\mvn.bat -Dexec.classpathScope=runtime -Dexec.args=-classpath %classpath org.quackedcube.camera.CameraDemo -Dexec.executable=C:\Program Files\Java\jdk1.6.0_21\bin\java.exe -Dnetbeans.execution=true -Dmaven.repo.local=W:\programming\maven-repo process-classes exec:exec

(元の完全なクラスパスの実行が変更されたexec:execため、私の構成が適用されることを願っています)

しかし、結果として実行されるプログラムは次のようになるため、私の環境変数は明らかに無視されます。

 Result of cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_21\bin\java.exe" -classpath *snip* org.quackedcube.camera.CameraDemo" execution is: '1'.

私はもう試した

  • environmentVariable タグ内で個別の Key タグと Value タグを使用する
  • environmentVariables タグ内でキーと値のタグを直接使用します (試してみる価値があります)
  • 相への結合
  • Maven 引数として渡し、代わりに exec:java を使用する
  • プロジェクト構成ページで -Djava.library.path=native/win32-x86 を実行引数および VM オプションとして渡す

そしてすべて失敗しました。私はここで本当に途方に暮れています。

これがmavenでJNIを使​​用することの欠点だと思います.テスト、ランタイム、モジュール実行POM、および親POMに引数として渡す必要があります。

私の質問:java.library.path実行されたファイルにプロパティを渡すにはどうすればよいですか? Netbeans の Run File 機能と統合できればいいのですが (そのため、POM でクラス名を変更し、ビルドしてから実行する必要はありません)。

4

2 に答える 2

6

これは知りませんでしたが、明らかにこれを行うときは、このプロパティを最初に配置する必要があります。クラスパスはすぐに実行されないので必要ないと思いましたが、どうやら違いがあるようです。

これを修正するには、[Project Properties] > [Actions] > [Run File via Main] でこれを変更するだけです

exec.classpathScope=${classPathScope}
exec.args=-Djava.library.path="native/win32-x86" -classpath %classpath ${packageClassName}
exec.executable=java

POM で指定できない理由は、NB がクラスパスとその実行内容をコマンド ライン経由で渡し、POM の内容exec.argsを上書きするためです。

これは醜く、プラットフォームに依存するかもしれませんが、JNI と Maven を混在させるとどうなるかです。私が見ることができる別の方法は本当にありません。

于 2010-10-20T14:59:10.557 に答える
1

これを試したかどうかはわかりませんが、JVM のレベルでプロパティを設定する必要がある限り、それを行う必要があります-Djava.library.path=/some/path

したがって、exec-maven-plugin に指定するには、次のように記述できます。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-Djava.library.path=${java.library.path}</argument>
    </arguments>
    </configuration>
</plugin>

もちろん、実行可能ファイルを更新し、別の属性を追加する必要があります。

于 2010-10-17T08:30:33.333 に答える