1つのクラスしか利用できない1つのmavenプロジェクトを作成しました。私はこのクラスでjnetpcap APIを使いたいと思っています。この目的のために、私はjnet eclipse setupチュートリアルのセットアップ1アプローチ(ユーザーライブラリ)を実行し、1つのユーザーライブラリを作成してプロジェクトに追加しました。必須のユーザーライブラリを使用してメインクラスを実行する方法は?
JnetTest.java - jnetpcap clasic example
私のシステムは、Ubuntuの16.10であるようこのクラスは同じです。
私はopenjdkバージョン "1.8.0_131"を使用しています。
ライブラリの作成手順 -
- 私は1.3バージョンのjarパッケージ、ソースパッケージとjnetpcapのjavadocのパッケージをダウンロードして、コメントを追加しlibjnetpcap.so、jnetpcap.jar、jnetpcap-src-1.3.zip、jnetpcap-javadoc- 1.3.zipからlibフォルダにメインプロジェクトフォルダの下に作成されます。
- 新しいライブラリを作成しました。 Java - >ビルドパス - >ユーザーライブラリ - >新規 - >任意の名前を付けます。
- jarファイルを追加します。外部jarsの追加 - >ワークスペースラジオボタン - > lib/jnetpcap.jarを選択
- 必要な依存関係を満たしています。 jar - > source - > edit - > lib/jnetpcap-src-1.3.zipを展開します。 javadoc - >編集 - >選択されたlib/jnetpcap-javadoc-1.3.zip。ネイティブライブラリの場所 - >編集 - >選択したlibディレクトリ。 - >適用 - > OK
- プロジェクトにライブラリを追加します。プロジェクト - >ビルドパス - >ビルドパスの設定 - >ライブラリ - >ライブラリの追加 - >ユーザライブラリ - >新しく作成されたライブラリを右クリックします。
メモ -私はメインクラスにvm引数を追加しませんでした。つまり、-Djava.library.path = ".soファイルの親ディレクトリの場所"
その後、プロジェクトを右クリックし、Javaアプリケーションとして実行をクリックしました。これは、うまくいく形で動作します。
実際の問題 -私は、コマンドラインのみを使用して、別のマシンでこのmavenプロジェクトを実行したいと考えています。コマンドラインを使ってこのプロジェクトをどのように実行できますか?
私のアプローチ -
私は、メインクラス構成のためのpom.xmlでのプラグインの下に追加。
<!-- language: lang-xml --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.example.Main</mainClass> </configuration> </plugin>
私は
mvn exec:java -Dexec.mainClass="com.example.Main"
私のメインクラスを実行するために、MVNのexecコマンドを使用しかし、私は例外の下になった - 私のアプローチは私を実行するために正しいかではありません
Exception in thread "main" java.lang.UnsatisfiedLinkError:
com.slytechs.library.NativeLibrary.dlopen(Ljava/lang/String;)J
at com.slytechs.library.NativeLibrary.dlopen(Native Method)
at com.slytechs.library.NativeLibrary.(Unknown Source)
at com.slytechs.library.JNILibrary.(Unknown Source)
at com.slytechs.library.JNILibrary.loadLibrary(Unknown Source)
at com.slytechs.library.JNILibrary.register(Unknown Source)
at com.slytechs.library.JNILibrary.register(Unknown Source)
at com.slytechs.library.JNILibrary.register(Unknown Source)
at org.jnetpcap.Pcap.(Unknown Source)
プロジェクトのメインクラス?はいの場合、私の問題の解決策は何ですか?いいえ、有用なアプローチを提案してください。
@ BenDamer-あなたの答えをありがとう。 jarと依存関係のバージョンの競合のために私の問題。どのような方法であれ、あなたのソリューションは非常に役に立ちます。なぜバージョン1.3.0の依存関係が利用できないのですか?外部からjarファイルを提供する必要があるのはなぜですか? – kit
バージョン1.3.0はかなり古いものですが、1.4.xはMavenリポジトリで利用可能です。あるいは、リポジトリに手動で1.3.0を手動でインストールすることもできます。 –
こんにちは@BenDamer、それはうまくいきます。あなたのように私はmavenを作成しました。今私は、この構造を失うことなく、このプロジェクトにメインクラスをもう1つ追加したいと思います。 – kit