0

私は2つのmavenモジュールを持っています:

  1. native-wrapper - nar-maven-plugin によってビルドされたシステム lib の JNI ラッパーです。
  2. main-module - native-wrapper に依存し、テスト中にその JNI 呼び出しを使用します。

ネイティブ ラッパーでのテストは問題なく動作します。しかし、main-module でのテスト中に、「UnsatisfiedLinkError」が発生します - NarSystem が JNI ライブラリを見つけられません。

native-wrapper の pom には以下が含まれます。

...
<packaging>nar</packaging>
...
<plugin>
    <groupId>com.github.maven-nar</groupId>
    <artifactId>nar-maven-plugin</artifactId>
    <version>3.0.0-rc-2</version>
    <extensions>true</extensions>
    <configuration>
        <libraries>
            <library>
                <type>jni</type>
                <narSystemPackage>some.native.wrapper</narSystemPackage>
            </library>
        </libraries>
    </configuration>
</plugin>

生成された .nar を ./target/ で開きました - 「/lib/amd64-Linux-gpp/jni/libnative-wrapper-0.1.0-SNAPSHOT.so」が含まれています。他の nar (Java クラスを含む) には、「/META-INF/nar/some.native.wrapper/native-wrapper/nar.properties」が含まれています。

メインモジュールの pom:

...
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>native-wrapper</artifactId>
    <version>${project.version}</version>
    <type>nar</type>
</dependency>
...
<plugin>
    <groupId>com.github.maven-nar</groupId>
    <artifactId>nar-maven-plugin</artifactId>
    <version>3.0.0-rc-2</version>
    <extensions>true</extensions>
</plugin>

main-module の pom から nar-maven-plugin プラグインを削除すると、maven はネイティブ ラッパー モジュールからクラスを検出しません。

nar に lib を見つけさせるにはどうすればよいですか?

4

1 に答える 1

1

<type>nar</type>アーティファクトを追加してテストを実行することはできないようです。Java の適切なライブラリ パスを自分で設定する必要があります。私はこのようにしました(メインモジュールのpomに加えて):

<packaging>nar</packaging>
...
<properties>
    <LIBRARY_PATH>${project.build.directory}/nar/native-wrapper-${project.version}-amd64-Linux-gpp-jni/lib/amd64-Linux-gpp/jni/:${project.build.directory}</LIBRARY_PATH>
</properties>
...
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <forkMode>once</forkMode>
        <environmentVariables>
            <LD_LIBRARY_PATH>${LIBRARY_PATH}</LD_LIBRARY_PATH>
            <DYLD_LIBRARY_PATH>${LIBRARY_PATH}</DYLD_LIBRARY_PATH>
        </environmentVariables>
        <systemProperties>
            <property>
                <name>java.library.tmpdir</name>
                <value>${LIBRARY_PATH}</value>
            </property>
            <property>
                <name>java.library.path</name>
                <value>${LIBRARY_PATH}</value>
            </property>
        </systemProperties>
    ...
</plugin>
于 2013-12-05T09:53:06.970 に答える