2017-07-27 9 views
1

私はEclipseを使用し、nar-mavenプラグインを使用して開発マシンでJNIプロジェクトを構築しました。これは複数のアーキテクチャでコンパイルされ、.narファイルが残っています。コマンドラインからnarファイルを実行するには?

私の問題は、narのJavaクラスの1つでメインプログラムを実行したいということです。 Javaプログラムがnarファイル内にあるネイティブライブラリをロードしようとすると、私はUnsatisfiedLinkErrorを取得し続けます。今私は、java.library.pathにある.soファイルが必要であることに気づいていますが、唯一のコピーは何とかnarファイル内にあるので、私はそのポイントをどこで作成するのか分かりません。私は、自動生成されたNarSystem.loadLibraryメソッドをJavaで使用しているため、これはバックグラウンドで処理されるという印象を受けました。

詳細はこちら

narプラグインの設定私のPOMの一部:

static { 
    com.myco.package.NarSystem.loadLibrary(); 
} 
:私のJavaクラスの一つで

 <plugin> 
      <groupId>com.github.maven-nar</groupId> 
      <artifactId>nar-maven-plugin</artifactId> 
      <version>3.5.1</version> 
      <extensions>true</extensions> 
      <configuration> 
       <libraries> 
        <library> 
         <type>jni</type> 
         <narSystemPackage>com.myco.package</narSystemPackage> 
        </library> 
       </libraries> 
      </configuration> 
     </plugin> 

を、私は、ライブラリをロードするための自動生成されたメソッドを呼び出す静的初期化子を持っています

mvn installを実行した後、私のローカル.m2/repositoryディレクトリの適切なサブディレクトリに次のファイルがあります。

  • maven-metadata-local.xml
  • _maven.repositories
  • project-0.0.1-arm-Linux-gpp-jni.nar
  • project-0.0.1.nar
  • project-0.0.1.pom
  • project-0.0.1-javadoc.jar

私は、このコマンドを使用して、コマンドラインから実行してみてください:

java -cp /home/myname/.m2/repository/com/myco/project/0.0.1/project-0.0.1.nar com.myco.package.MainClass 

これは、適切なメインプログラムの実行を開始するので、Java部分が見つかりました。静的ブロックの上 - - それはそれはネイティブライブラリをロードする必要がポイントになると、それはエラーがスローされます

Exception in thread "main" java.lang.UnsatisfiedLinkError: no project-0.0.1 in java.library.path 

この質問、Nar dependency in multi-module maven project、それは近いだろうように見えたが、答えはすでに持っ依存何らかの形で「公開」されたネイティブライブラリ私はmvn nar:nar-unpackmvn exec:javaを試している質問者に従ったが、それは私を前進させなかった。考える(。その質問で説明したように最初に、私は第二のために、ここで説明したのと同じ例外から同じ明らかにヌルの結果を取得します)

その他の質問:

  • Maven - UnsatisfiedLinkError with java.library.pathライブラリを見つけることについているように見えますMavenプロセスの外側にあります。私が配備されると助けにならないmaven設定ファイルの点で答えを出します。
  • maven-nar-plugin and tests in dependent moduleこれは、テストの実行に固有の問題を扱います。
  • nar-maven-plugin and native-library-loader dont load native libこれは近いですが、いずれにしても答えがありません。それは、ポスターが何とかコマンドラインにライブラリパスを指定しようとしていたために違っているようです。
  • Using a native Maven artifact (nar) in a webappこれはwebappに組み込まれているため、別のものです。この手がかりを提供しているようです。「これらはどちらもNAR成果物として生成され、使用するにはmaven-narプラグインが必要です。」しかし、私はどのようにプラグインを使用する必要があるのか​​分かっていない!

どうすればこのメインプログラムをコマンドラインから実行できますか?ネイティブライブラリを「抽出」する前処理ステップがある場合、それは何ですか?それが自動であれば、何が欠けていますか?ありがとう!

答えて

1

私はヒントを得て、ついにそれを手に入れました!

この依存関係は、POMに追加する必要があります、私はまだクラッシュしたコマンドラインからjavaで直接それを実行しようとすると

mvn exec:java -Dexec.mainClass=com.myco.package.MainClass 

使用して、それを実行することができた後

<dependency> 
     <groupId>org.scijava</groupId> 
     <artifactId>native-lib-loader</artifactId> 
     <version>2.2.0</version> 
    </dependency> 

が、この場合、依存関係のjarファイルが見つからないため、クラッシュしました。おそらく、もし私が-cpフラグを持つすべてのクラスパスエントリを指定するならば、私はmavenなしでそれを実行することができます。

関連する問題