我创建了一个maven项目,其中只有一个类可用。我想在此类中使用jnetpcap API。为此,我遵循了带有设置1方法(用户库)的jnet eclipse设置教程,并创建了一个用户库并将其添加到我的项目中。
JnetTest.java- 此类与jnetpcap经典示例相同
我的系统是Ubuntu 16.10。
我正在使用openjdk版本“ 1.8.0_131”。
库创建步骤-
注意- 我没有在主类中添加vm参数。即-Djava.library.path =“。so文件的父目录的位置”
之后,我右键单击我的项目,然后单击以Java应用程序运行。这将在日食中正常工作。
实际问题- 我只想通过命令行在一台不同的机器上运行该Maven项目。如何使用命令行运行此项目?
我的方法-
<!-- 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"
但是我得到了例外-
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要求您在项目中引用两个库:
您看到的异常表明您在运行时缺少#2。在这种情况下,您有两个选择可使库对您的应用程序可用:
您可以通过回显$PATH系统变量来找出Ubuntu路径上的目录:
$PATH
> echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
只需将本机库复制到系统路径中已包含的目录中即可。
另外,您可以使用java.library.pathJava 的参数传递库的位置。假设该库lib位于您的maven项目目录内的目录中,请使用以下配置:
java.library.path
lib
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <executable>java</executable> <arguments> <argument>-Djava.library.path=${project.basedir}/lib</argument> <argument>-classpath</argument> <classpath /> <argument>com.example.Main</argument> </arguments> </configuration> </plugin>
要执行此操作,只需运行:
mvn exec:exec