如何在 maven 的 java.library.path 变量中包含本机库

2024-03-19

我正在尝试为我的应用程序使用 JNotify,它有以下要求

只需使用以下命令运行 jar 文件即可测试 JNotify: java -Djava.library.path=. -jar jnotify-VER.jar [目录]

然后,JNotify 将监视指定的目录(如果未指定目录,则监视当前目录)并打印检测到的事件。注意java.library.path应该指向本机库的位置jnotify 附带(dll、dylib 等)。

但试图用 Maven 来实现同样的功能是行不通的。我正在尝试运行一个简单的测试,但出现以下错误

    java.lang.UnsatisfiedLinkError: no jnotify in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at net.contentobjects.jnotify.linux.JNotify_linux.<clinit>(Unknown Source)
    at net.contentobjects.jnotify.linux.JNotifyAdapterLinux.<init>(Unknown Source)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)        

这意味着在库路径上找不到本机文件。

我的 pom.xml 看起来像这样 -

我已将 jar 和 .so 添加到我们的内部存储库中

<dependency>
            <groupId>net.contentobjects</groupId>
            <artifactId>jnotify</artifactId>
            <version>0.93</version>
</dependency>
<dependency>
           <groupId>net.contentobjects</groupId>
           <artifactId>jnotify</artifactId>
           <version>0.93</version>
           <type>so</type>
</dependency>


<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <configuration>
            <argLine>-Djava.library.path=target/lib/</argLine>
     </configuration>
</plugin>

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-dependency-plugin</artifactId>
     <executions>
       <execution>
              <id>copy</id>
              <phase>compile</phase>
              <goals>
                     <goal>copy</goal>
              </goals>
              <configuration>
                    <artifactItems>
                      <artifactItem>
                             <groupId>net.contentobjects</groupId>
                             <artifactId>jnotify</artifactId>
                             <version>0.93</version>
                             <type>so</type>
                             <overWrite>true</overWrite>
                      <outputDirectory>${project.build.directory}/lib</outputDirectory>
                     </artifactItem>
                     </artifactItems>
               </configuration>
             </execution>
          </executions>
 </plugin>

这不起作用,有什么想法缺少什么吗?

thanks


依赖项 .so 文件是否在编译阶段复制到目标目录中?它的命名正确吗?它可能会被命名为 jnotify-0.93.so。

如果您需要将其命名为 jnotify.so,您可能需要尝试打开剥离版本 http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html#stripVersionmaven-dependency-plugin 的复制目标的选项。

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

如何在 maven 的 java.library.path 变量中包含本机库 的相关文章

随机推荐

  • 为什么必须同时使用编译器标志和运行时标志才能在 Haskell 中获得多核支持?

    Haskell wiki 显示您需要同时设置编译标志和运行时标志才能获得多核支持 为什么使用该库不足以在编译时获得正确的行为 为什么运行时可执行文件无法检测到它是使用 threaded 编译的并使用系统上的所有内核 除非另有指定 我认为默认
  • 在 Unix 上正确处理 PID 文件的参考

    我在哪里可以找到备受推崇的参考详细介绍了 Unix 上 PID 文件的正确处理 在 Unix 操作系统上 通常的做法是使用特殊的锁定文件 PID 文件来 锁定 程序 通常是守护程序 这是一个位于可预测位置的文件 通常是 var run fo
  • 如何在 Windows 上使用 subprocess.run 运行 bash 命令 [重复]

    这个问题在这里已经有答案了 我想使用运行 shell 脚本和 git bash 命令subprocess run 在 python 3 7 4 中 当我在上面运行这个简单的例子时子流程文档页面 https docs python org 3
  • 错误 TS2300:node_modules/@types/core-js/index.d.ts 中重复标识符“PropertyKey”

    我在 Visual Studio Code IDE 的 node modules types core js index d ts 中遇到以下错误 当我跑步时npm start为了服务该应用程序 我得到 node modules types
  • iPhone客户端证书

    我想验证我正在编写的应用程序是否正在 iPhone 上运行 会是什么 完美之处在于 Apple 将 SSL 客户端证书嵌入到每台 iPhone 中 该证书可以由接收服务器进行身份验证 我是这种情况吗 我还没有开始研究这个 我会更新我发现的任
  • 计算没有两个相邻字符相同的所有排列

    给定一个仅包含不同数量的数字 1 2 3 和 4 的序列 例如 13244 4442 等 我想计算其所有排列 以便没有两个相邻的数字是相同的 我相信它是 O N N 并且想知道是否有更好的 有人有主意吗 class Ideone stati
  • Python:删除子类中的类属性

    我有一个子类 我想要它not包括基类上存在的类属性 我尝试了这个 但它不起作用 gt gt gt class A object x 5 gt gt gt class B A del x Traceback most recent call
  • javascript 从http响应保存文件(Web Api HttpResponseMessage)

    所以当我尝试从服务器响应保存文件时遇到问题 当我尝试从浏览器中的 url 下载文件时 一切正常 但当我尝试从 clint 端发送请求时 文件已保存 但文件中存在 Object object 如果是 PDF 文件 则无法打开 请求必须包含一个
  • 如何使用 LLVM IRBuilder 从外部 DLL 调用函数?

    如何从 LLVM 调用外部 DLL 的函数 如何从 LLVM 代码调用 DLL 文件中定义的函数 由于您的问题缺少重要信息 我猜您想实现以下目标 我猜你会使用 c c 接口并且该函数有一个签名void fun void 我还猜测您将使用 L
  • 如何在离子中滚动到页面顶部

    目前我正在 javascript 和 angular js 上的 ionic 框架中工作 我只是放置搜索框并呈现客户列表 但假设在第一次尝试中我可以使用 a 进行搜索 它会显示具有 alpha a 的所有项目 但问题是当我向下滚动查看搜索结
  • 如何定义状态?

    有谁有一个好的定义state在网络应用程序的上下文中 更具体地说 什么是state在 React 的上下文中意味着 这与第一个定义有什么不同吗 我看到 状态 这个术语在 React 开发中被大量使用 但我一直无法找到一个可靠 简洁的定义 两
  • 我可以在 SQL Server Management Studio 中拥有多行选项卡吗

    我想知道是否可以将 SQL Server 设置为具有多行文件 查询选项卡 我有很多查询想要在它们之间切换 并且可以将它们移动到不同的水平组 但我认为两行比左侧下拉打开查询的大列表的引脚更容易导航 如果您固定足够的代码窗口来填满顶部栏 则 V
  • 使用自定义主干集合构建 Fuelux Datagrid 数据源

    我正在尝试构建启用排序 搜索和分页的数据网格 因此 我使用fuelux datagrid 我的主干视图如下所示 var app app function use strict The Players view app PlayersView
  • Linux / Bash 中随机打乱行

    我在linux下有一些文件 例如2 我需要将文件混入一个文件中 例如 cat file1 line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 and cat file2 linea
  • 使用线程循环更新 JFrame

    我对在循环中使用线程进行了一些广泛的搜索 虽然我了解单独线程如何工作的概念 但我似乎仍然无法掌握如何在我的简单应用程序中实现它 我的申请由一个带有文本框的表单组成 每次循环迭代时都需要更新此文本框 它以按下按钮开始 但循环也应以按下停止按钮
  • Javascript:无法获取新创建元素的高度

    使用新元素 例如 body append html 更新 DOM 后 我无法立即获取新更新元素的高度 例如 body height 部分修复是设置时间间隔并获取时间间隔结束时的高度 setTimeout alert body height
  • ncurses 终端大小

    如何找到 ncurses 应用程序的终端宽度和高度 void getmaxyx WINDOW win int y int x http linux die net man 3 getmaxyx我相信 另外 这可能会有所帮助 在C中获取终端宽
  • 使用多处理时合并 Pandas DataFrame

    我正在使用多重处理 并为每个进程生成一个 pandas DataFrame 我想将它们合并在一起并输出数据 以下策略似乎几乎有效 但是当尝试使用以下命令读取数据时df read csv 它只使用第一个name作为列标题 from multi
  • argparse 的非常基本的例子? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试编写最基本的代码来显示 arg 解析的工作原理 以便我能够理解它 我尝试阅读有关 argparse 的教程 但它非常令人困惑
  • 如何在 maven 的 java.library.path 变量中包含本机库

    我正在尝试为我的应用程序使用 JNotify 它有以下要求 只需使用以下命令运行 jar 文件即可测试 JNotify java Djava library path jar jnotify VER jar 目录 然后 JNotify 将监