我正在使用 Maven 为我的项目生成一个可运行的 jar 文件,其中包含所有依赖项(复制到一个单独的文件夹中)。
http://pastebin.com/NfhiVZhM (链接到 pom.xml 以避免在此处复制巨型 xml)
我在装有 jdk 1.8 的 Windows 10 机器上运行 mvn package。在 mvn run 之后,如果我打开 cmd 并运行 java -jar instagramBot.jar
一切正常。
Maven 生成结果(目标)的文件夹由 Dropbox 与带有 oracle-jdk-1.8 的 Ubuntu 机器同步。
但是如果在 Ubuntu 上打开一个 shell 并运行相同的命令,结果是:
rafa@Bangkok:~/svn/instagramBot/target$ java -jar instagramBot.jar Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: com/tomatechines/instagramapi/services/exception/InstagramException
在此之后打印 JVM 堆栈跟踪并且程序崩溃。
我已经三重检查了包含 com/tomatechines/instagramapi/services/exception/InstagramException
的 jar 是否存在于类路径中,也存在于 Ubuntu 机器的库文件夹中。但是错误一直在发生。
我还检查了 jar 名称中可能出现的任何特殊字符,但我什么也没找到。
堆栈跟踪对错误没有任何进一步的解释:
Error: A JNI error has occurred, please check your installation and try again
有没有人知道可能是什么或者我还应该检查什么来确定问题?
==============更新============
我使用的所有库都是 jar。没有 DLL 或特定于操作系统的文件。
我尝试通过 Eclipse 导出一个可运行的 jar 文件并将所有库打包到一个 jar (58MB) 中,它在 Ubuntu 上正常工作...我不想使用这种方法,因为我的代码将要更改很多而且我使用的库没有,但是如果我将所有东西都打包在一个 jar 中,每次我修复一个小错误,我都需要重新同步 58MB,尽管事实上 Eclipse 导出 jar 的过程非常不方便。
最佳答案
答案在这里
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent
您可能希望在您的 pom 中将源编码声明为 utf8,请参阅 this link
<properties>
...
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...
</properties>
关于java - jar 在 Windows 上运行但在 Ubuntu 上不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42859051/