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

2023-12-09

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

JnetTest.java -这个类与jnetpcap 经典示例

我的系统是Ubuntu 16.10。

我使用的是 openjdk 版本“1.8.0_131”。

库创建步骤 -

  1. 我下载了jnetpcap的1.3版本jar包、源码包和javadoc包,并将libjnetpcap.so、jnetpcap.jar、jnetpcap-src-1.3.zip、jnetpcap-javadoc-1.3.zip添加到主项目文件夹下创建的lib文件夹中。
  2. 创建了新库。 Java->构建路径->用户库->新建->给出任意名称。
  3. 添加jar文件。添加外部 jar -> 工作区单选按钮 -> 选择 lib/jnetpcap.jar
  4. 满足所需的依赖关系。展开 jar -> 源 -> 编辑 -> 选择 lib/jnetpcap-src-1.3.zip。 javadoc -> 编辑 -> 选择 lib/jnetpcap-javadoc-1.3.zip。本机库位置 -> 编辑 -> 选定的 lib 目录。 -> 应用 -> 确定
  5. 将库添加到项目中。右键单击项目 -> 构建路径 -> 配置构建路径 -> 库 -> 添加库 -> 用户库 -> 选择新创建的库。

Note -我没有将 vm 参数添加到我的主类中。即 -Djava.library.path=".so 文件的父目录的位置"

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

实际问题-我想仅使用命令行在一台不同的机器上运行这个 Maven 项目。如何使用命令行运行这个项目?

我的做法——

  1. 我在 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>
    
  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. 将操作系统特定功能公开给 Java 库的本机库(即 libjnetpcap.so 或 jnetpcap.dll)

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

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

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

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

或者,您可以使用以下方式传递图书馆的位置java.library.pathJava 的参数。假设该库位于名为的目录中lib在您的 Maven 项目目录中,使用以下配置:

<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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用所需的用户库执行maven主类? 的相关文章

随机推荐

  • 如何使用闭包在两个 ViewController 之间传递数据

    我想知道如何使用闭包传递数据 我知道有三种类型的数据传递方法 delegate 通知中心 closure 我想用一个例子来正确地澄清闭包 使用块 闭包传递数据是一种很好且合理的方法 比通知要好得多 下面是相同的代码 第一个 ViewCont
  • Linq 同时进行 2 个集合

    我有两个清单 List a listA1 GetFirstList List a listA2 GetSecondList and class A定义 class A public int Id get set public DateTim
  • 无法使用 OpenShift 安装 Pandas

    I am ssh ingFlask 应用程序OpenShiftPython 依赖项之一是 Pandas 0 16 1 纵观整个OpenShift 文档 我创建了我的setup py文件如下 from setuptools import se
  • mod重写和静态页面

    是否可以排除 mod 重写正在解析的 url 我的 htaccess 有重写规则 例如 RewriteRule contact contact us php 还有几个静态页面 目前我的网站没有使用方面的问题http domain com u
  • 当应用程序未运行时,Android 广播接收器不会触发

    遵循本指南https developer android com training monitoring device state battery monitoring html 我制作了一个接收器 每次插入或拔出充电器时 该接收器都应将电
  • 从资源加载嵌入的动画光标

    我在资源中有一个动画光标文件 ani 并希望将其显示为我的应用程序中的光标 如何从资源中加载它 我在互联网上查找 但只有当你有一个真实的文件并且它没有嵌入到资源中时才可以显示它 这里的资源修改是 调用中的byte 变量资源 由 Yvan G
  • 带有滑动过渡的 jQuery Mobile ChangePage

    在处理 向右滑动 事件时 我似乎无法制作 反向 幻灯片效果 因此 下面的代码工作正常 但我希望当我进行 向右滑动 时 下一页将从左侧而不是右侧滑入 我确实搜索了文档并添加了reverse true as 正如它所建议的进入 向右滑动 mob
  • 跳到指令中间 - 在 IA-32 中

    为什么IA 32可以让我们跳到指令的中间 当我用汇编器编写时 如何使用这种架构特征进行优化 除了明显的情况外 我们喜欢将命令的编码保存在寄存器内 然后激活该命令 由于历史原因 IA 32 允许跳转到指令中间 x86 指令集是 8080 使用
  • AngularJS:我可以使用过滤器在 ng-repeat 中对数组进行分块吗?

    编辑添加一个明确的问题 我有一个一定长度的平面数组 我想将其放入 tr td 类型视图中 这也可能位于引导网格或类似的东西中 本质上我想在一系列长度为 n 的块中显示一个平面数组 这个问题有很多变体 但我还没有真正看到一个很好的解释 如何使
  • pygame 中的霓虹灯效果?

    我正在使用 pygame 项目 我需要我的游戏立方体具有霓虹灯效果 pygame 有没有一个函数可以制作霓虹灯效果或类似的东西 pygame draw rect win 255 0 255 neon Pygame 没有 发光 绽放 或 霓虹
  • 在 Android 中使用结构查询 (sq) 从 Google Spreadsheet API 检索数据时出现错误

    我正在 Android 中使用 Google Spreadsheet API 我成功完成了集成并能够检索行 但在搜索功能上遇到了一些问题 我正在对电子表格进行 3 4 种不同的搜索 问题是在我的电子表格中的某些列中 单词之间有空格 例如 H
  • C++ 同名函数的继承

    我有以下类声明 class human public void msg cout lt lt I am human n class John public human public void msg cout lt lt I am a Jo
  • 从 xml 中提取节点数据

    我有一个像这样的xml
  • 在 WooCommerce“我的帐户”订单表的新列中显示产品类别

    我想添加一个自定义列 以在 wooCommerce 中的订单历史记录表上显示产品类别 我找到了如何添加自定义列 但我似乎无法显示链接到此列中的订单的分类产品 对于这个例子 我只有 1 个产品 但如果我可以显示不止一种税 那就更好了 这是我发
  • 在项目中进行任何更改但升级 eclipse android sdk 后出现 java.lang.ClassNotFoundException [重复]

    这个问题在这里已经有答案了 前段时间我开发了一个相当简单的应用程序 目标是4 2 2 我让它在我的设备上正常工作 然后我停止了开发大约1个月 在最近的 Google I O 之后 我决定重新开始开发 我首先做的是打开 Android SDK
  • 检索 asp:TextBox 的值

    我有一个禁用的文本框 我正在使用 JavaScript 在客户端编辑其值 当我尝试检索服务器端的值时 它不会反映在客户端所做的更改 如果我将文本框的启用属性设置为 true 我可以检索该值 但用户可以放置焦点并编辑文本框 有没有一种明智的方
  • PHP 从数组中获取最高值

    我试图获取数组中的最大值 同时仍然保留项目标签 我知道我可以通过运行 sort 来做到这一点 但如果我这样做 我只会丢失标签 这使得它对我所需要的毫无意义 这是数组 array a gt 1 b gt 2 c gt 4 d gt 5 有任何
  • Lucene 4.0 IndexWriter 更新数字术语文档

    我只是想知道如何根据数字字段更新 删除 插入 文档 到目前为止我这样做了 LuceneManager updateDocument writer new Term id NumericUtils intToPrefixCoded sente
  • javascript解析浮点错误

    我正在尝试获取表的行总和 td1 价值 5 000 00 美元 td2 价值 3000 00 美元 我正在使用以下代码 var totalnum 0 num each function totalnum parseFloat this ht
  • 如何使用所需的用户库执行maven主类?

    我创建了一个 Maven 项目 其中只有一个类可用 我想在这个类中使用 jnetpcap API 为此 我遵循了jnet eclipse 设置使用设置 1 方法 用户库 的教程并创建了一个用户库并将其添加到我的项目中 JnetTest ja