如何使用所需的用户库执行maven主类?
我创建了一个maven项目,其中只有一个类可用。 我想在这个类中使用jnetpcap API。 为此,我使用安装1方法(用户库)跟踪jnet eclipse安装教程并创建了一个用户库并将其添加到我的项目中。
JnetTest.java –此类与jnetpcap clasic示例相同
我的系统是Ubuntu 16.10。
我正在使用openjdk版本“1.8.0_131”。
图书馆创建步骤 –
- 我下载了1.3版本的jar包,源包和javadoc包的jnetpcap,并将libjnetpcap.so,jnetpcap.jar,jnetpcap-src-1.3.zip,jnetpcap-javadoc-1.3.zip添加到在主项目文件夹下创建的lib文件夹中。
- 创建了新的库。 Java-> Build Path – > User Libraries – > New – > Give Any Name。
- 添加jar文件。 添加外部jar – >工作区单选按钮 – >选择lib / jnetpcap.jar
- 满足所需的依赖性。 expand jar – > source – > edit – > selected lib / jnetpcap-src-1.3.zip。 javadoc – > edit – >选择了lib / jnetpcap-javadoc-1.3.zip。 本机库位置 – >编辑 – >选择的lib目录。 – >申请 – >好的
- 将库添加到项目中。 右键单击项目 – >构建路径 – >配置构建路径 – >库 – >添加库 – >用户库 – >选择新创建的库。
注意 –我没有在主类中添加vm参数。 即-Djava.library.path =“.so文件的父目录的位置”
之后,我右键单击我的项目,然后单击作为Java应用程序运行。 这将在eclipse中正常工作。
实际问题 –我想在仅使用命令行的另一台机器上运行此maven项目。 如何使用命令行运行此项目?
我的方法 –
-
我在pom.xml中添加了下面的插件,用于主类配置。
org.codehaus.mojo exec-maven-plugin 1.2.1 java com.example.Main
-
我使用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要求您在项目中引用两个库:
- 包含可以从代码中使用的Java接口的JAR文件(jnetpcap.jar)
- 将操作系统特定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 ...