1

を試すための単純な JNI ベースのプロジェクトがありnar-maven-pluginます。Windows 10 を実行しており、MinGW コンパイラを使用しています。この質問には関係ないと思いますが、ネイティブ コードを C ではなく C++ としてコンパイルしています。(「実際の」プロジェクトのネイティブ実装は C++ を使用するため、この最初のテストを超えてしまうと、これを変更するだけでは簡単ではありません。)

このビルドをmaven installEclipse IDE 経由で作成するには、POM ファイルでプラグインの一部としてリンカを明示的に指定する必要がありますconfiguration。関連するセクションは次のとおりです。

        <plugin>
            <groupId>com.github.maven-nar</groupId>
            <artifactId>nar-maven-plugin</artifactId>
            <version>3.5.1</version>
            <extensions>true</extensions>
            <configuration>
                <linker>
                    <name>g++</name>
                    <options>
                        <option>-Wl,--kill-at</option>
                    </options>
                </linker>
                <libraries>
                    <library>   
                        <type>jni</type>
                        <narSystemPackage>com.mycompany.sandbox</narSystemPackage>
                    </library>
                </libraries>
            </configuration>
        </plugin>

これを行う場合、ローカル マシンは問題ありませんが、POM を特定のマシン/リンカーに特化したと考えています。完全に削除すると、次のエラーが発生します。

[INFO] --- nar-maven-plugin:3.5.1:nar-validate (default-nar-validate) @ nar-test ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.786 s
[INFO] Finished at: 2017-06-29T17:05:34-04:00
[INFO] Final Memory: 8M/23M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.maven-nar:nar-maven-plugin:3.5.1:nar-validate (default-nar-validate) on project nar-test: Execution default-nar-validate of goal com.github.maven-nar:nar-maven-plugin:3.5.1:nar-validate failed. NullPointerException -> [Help 1]

この部分を残して<name>g++</name>オプションだけを削除すると、コンパイルは行われますが、実行時にネイティブ実装にリンクできないため、テストは失敗します。(これは--kill-atフラグと既知の問題に関連しているため、それほど驚くことではありません。)

マシンに依存しない POM が機能するように、この問題を処理する既知の方法はありますか?

4

2 に答える 2