gpt4 book ai didi

java - 如何从命令行运行 nar 文件?

转载 作者:行者123 更新时间:2023-11-30 06:35:00 33 4
gpt4 key购买 nike

我使用 Eclipse 并使用 nar-maven 插件在我的开发机器上构建了一个 JNI 项目。它可以在多种架构上进行编译,并留下 .nar 文件。

我的问题是,现在我想在 nar 中的 Java 类之一中运行主程序。当 Java 程序尝试加载应位于 nar 文件中的 native 库时,我不断收到 UnsatisfiedLinkError 错误。现在我意识到 .so 文件需要位于 java.library.path 上,但我的问题是我看不到在哪里指出这一点,因为唯一的副本是以某种方式位于 nar 文件中。我的印象是这将在幕后处理,因为我使用的是 Java 中自动生成的 NarSystem.loadLibrary 方法。

详细信息如下。

我的 POM 配置 nar 插件的部分:

        <plugin>
<groupId>com.github.maven-nar</groupId>
<artifactId>nar-maven-plugin</artifactId>
<version>3.5.1</version>
<extensions>true</extensions>
<configuration>
<libraries>
<library>
<type>jni</type>
<narSystemPackage>com.myco.package</narSystemPackage>
</library>
</libraries>
</configuration>
</plugin>

在我的一个 Java 类中,我有一个静态初始化程序,它调用自动生成的方法来加载库:

static {
com.myco.package.NarSystem.loadLibrary();
}

运行mvn install后,我的本地.m2/repository目录的相应子目录中有以下文件:

  • maven-metadata-local.xml
  • _maven.repositories
  • project-0.0.1-arm-Linux-gpp-jni.nar
  • project-0.0.1.nar
  • project-0.0.1.pom
  • project-0.0.1-javadoc.jar

我尝试使用以下命令从命令行运行:

java -cp /home/myname/.m2/repository/com/myco/project/0.0.1/project-0.0.1.nar com.myco.package.MainClass

开始运行相应的主程序,因此它找到了Java部分。当它到达应该加载 native 库(上面的静态 block )的位置时,它会抛出错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no project-0.0.1 in java.library.path

这个问题,Nar dependency in multi-module maven project ,看起来很接近,但答案取决于已经以某种方式“公开” native 库。我跟着提问者尝试了 mvn nar:nar-unpackmvn exec:java,但这并没有让我进步。 (从第一个问题中获得相同的显然为空的结果,以及我在此处为第二个问题描述的相同异常。)

考虑的其他问题:

那么如何从命令行运行这个主程序呢?如果有一些预处理步骤来“提取” native 库,那么它是什么?如果它是自动的,那么我错过了什么?谢谢!

最佳答案

我得到了一个提示,终于得到了!

需要将此依赖项添加到 POM 中:

    <dependency>
<groupId>org.scijava</groupId>
<artifactId>native-lib-loader</artifactId>
<version>2.2.0</version>
</dependency>

之后我可以使用运行它

mvn exec:java -Dexec.mainClass=com.myco.package.MainClass

尝试从命令行直接使用 java 运行它仍然会崩溃,但在这种情况下它崩溃是因为它找不到依赖项的 jar。如果我用 -cp 标志为所有这些项目指定类路径条目,那么我现在可以在没有 Maven 的情况下运行它。

关于java - 如何从命令行运行 nar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45360282/

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