如何使用所需的用户库执行maven主类?

我创建了一个maven项目,其中只有一个类可用。 我想在这个类中使用jnetpcap API。 为此,我使用安装1方法(用户库)跟踪jnet eclipse安装教程并创建了一个用户库并将其添加到我的项目中。

JnetTest.java –此类与jnetpcap clasic示例相同

我的系统是Ubuntu 16.10。

我正在使用openjdk版本“1.8.0_131”。

图书馆创建步骤 –

  1. 我下载了1.3版本的jar包,源包和javadoc包的jnetpcap,并将libjnetpcap.so,jnetpcap.jar,jnetpcap-src-1.3.zip,jnetpcap-javadoc-1.3.zip添加到在主项目文件夹下创建的lib文件夹中。
  2. 创建了新的库。 Java-> Build Path – > User Libraries – > New – > Give Any Name。
  3. 添加jar文件。 添加外部jar – >工作区单选按钮 – >选择lib / jnetpcap.jar
  4. 满足所需的依赖性。 expand jar – > source – > edit – > selected lib / jnetpcap-src-1.3.zip。 javadoc – > edit – >选择了lib / jnetpcap-javadoc-1.3.zip。 本机库位置 – >编辑 – >选择的lib目录。 – >申请 – >好的
  5. 将库添加到项目中。 右键单击项目 – >构建路径 – >配置构建路径 – >库 – >添加库 – >用户库 – >选择新创建的库。

注意 –我没有在主类中添加vm参数。 即-Djava.library.path =“.so文件的父目录的位置”

之后,我右键单击我的项目,然后单击作为Java应用程序运行。 这将在eclipse中正常工作。

实际问题 –我想在仅使用命令行的另一台机器上运行此maven项目。 如何使用命令行运行此项目?

我的方法 –

  1. 我在pom.xml中添加了下面的插件,用于主类配置。

      org.codehaus.mojo exec-maven-plugin 1.2.1    java     com.example.Main   
  2. 我使用mvn exec命令来运行我的主类

     mvn exec:java -Dexec.mainClass="com.example.Main" 

但我得到以下例外 –

 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) 

我的方法是否正确执行我的项目的主类? 如果是,那么我的问题的解决方案是什么? 如果没有请建议有用的方法。

JnetPcap要求您在项目中引用两个库:

  1. 包含可以从代码中使用的Java接口的JAR文件(jnetpcap.jar)
  2. 将操作系统特定function暴露给Java库的本机库(即libjnetpcap.so或jnetpcap.dll)

您看到的exception表明您在运行时缺少#2。 在这种情况下,您有两个选项可以使您的应用程序可以使用该库:

您可以通过回显$PATH系统变量找出Ubuntu上的路径中的哪些目录:

 > echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin 

只需将本机库复制到系统路径中已包含的目录中即可。

或者,您可以使用java.library.path参数将库的位置传递给Java。 假设库位于maven项目目录中名为lib目录中,请使用以下配置:

  org.codehaus.mojo exec-maven-plugin 1.2.1  java  -Djava.library.path=${project.basedir}/lib -classpath  com.example.Main    

要执行此操作,只需运行:

 mvn exec:exec 

我没有你的确切代码我认为你正在寻找这个。

http://www.mojohaus.org/exec-maven-plugin/examples/example-exec-using-plugin-dependencies.html

下面标记的部分是您可以放置​​主类所需的依赖项的部分。 我希望这有效。

   ...    org.codehaus.mojo exec-maven-plugin 1.6.0   ...  java     false true  com.example.myproject mylib  com.example.Main  argument1 ...    myproperty myvalue  ...      com.example.myproject mylib 1.3.5 jar      ...