gpt4 book ai didi

maven - 如何在 Maven 的 java.library.path 变量中包含 native 库

转载 作者:行者123 更新时间:2023-12-04 02:23:42 25 4
gpt4 key购买 nike

我正在尝试将 JNotify 用于我的应用程序,它具有以下要求

JNotify can be tested by simply running the jar file with the followng commend:java -Djava.library.path=. -jar jnotify-VER.jar [dir]

JNotify will then monitor the specified dir (or the current directory if dir is not specified) and print detected events. Note that java.library.path should point to the location of the native libraries that comes with jnotify (dlls, so dylibs etc).


但是试图用 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)
这意味着在库路径上找不到 native 文件。
我的 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>
但这不起作用,缺少什么想法?
谢谢

最佳答案

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

如果您只需要将它命名为 jnotify.so,您可能想尝试打开 stripVersion maven-dependency-plugin 的复制目标选项。

关于maven - 如何在 Maven 的 java.library.path 变量中包含 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com