【发布时间】:2017-08-09 02:26:08
【问题描述】:
我正在使用 Maven 为我的项目生成一个可运行的 jar 文件,其中包含所有依赖项(复制到单独的文件夹中)。
http://pastebin.com/NfhiVZhM(链接到 pom.xml 以避免在此处复制巨型 xml)
我在装有 jdk 1.8 的 Windows 10 机器上运行 mvn 包。 mvn 运行后,如果我打开 cmd 并运行 java -jar instagramBot.jar 一切正常。
Maven 生成结果(目标)的文件夹由 Dropbox 与装有 oracle-jdk-1.8 的 Ubuntu 机器同步。
但是如果在 Ubuntu 上打开一个 shell 并运行相同的命令,结果是:
rafa@Bangkok:~/svn/instagramBot/target$ java -jar instagramBot.jar 错误:发生 JNI 错误,请检查您的安装并 重试线程“主”java.lang.NoClassDefFoundError 中的异常: com/tomatechines/instagramapi/services/exception/InstagramException
在打印出 JVM 堆栈跟踪后,程序崩溃。
我已经三次检查了包含 com/tomatechines/instagramapi/services/exception/InstagramException 的 jar 是否存在于类路径中,并且也存在于 Ubuntu 机器的库文件夹中。但是错误一直在发生。
我还检查了罐子名称中可能出现的任何特殊字符,但我什么也没找到。
堆栈跟踪对错误没有任何进一步的解释:
错误:发生 JNI 错误,请检查您的安装并 再试一次
有谁知道可能是什么或我应该检查什么来确定问题?
==============更新============
我使用的所有库都是罐子。没有 DLL 或操作系统特定的文件。
我尝试通过 Eclipse 导出一个可运行的 jar 文件并将所有库打包在一个 jar (58MB) 中,它在 Ubuntu 上正常工作...我不想使用这种方法,因为我的代码会改变很多,而我使用的库没有,但是如果我将所有内容打包在一个 jar 中,每次我修复一个小错误时,我都需要重新同步 58MB,尽管事实上 Eclipse 导出 jar 的过程非常不方便。
【问题讨论】:
-
JNI 是 Java 本地接口,它是 Java 与本地库(专门为操作系统编写的库,例如 C 或 C++)对话的方式。您尝试运行的程序是否需要本机库?你在正确的地方有 Linux 的相关库吗? (注意:Windows DLL 不能在 Linux 上运行,您需要特定于 Linux 的库版本)。
-
不!我使用的所有库都是罐子。现在我尝试通过eclipse导出一个可运行的jar文件并将所有库打包在一个jar(58MB)中,它在ubuntu上正常工作......
-
错误提示检查您的安装。它可能指的是jvm本身
-
是多模块项目吗?你用什么命令与maven一起使用?可以显示maven的输出吗?
-
@asettouf,不是多模块,我使用的命令只是 mvn 包(您可以在链接中查看 pom.xml)。 mvn 输出你可以检查pastebin.com/gW4tQuX6 但没有什么特别的
标签: java maven jar java-native-interface compatibility