java - jar 在 Windows 上运行但在 Ubuntu 上不运行

标签 java maven jar java-native-interface compatibility

我正在使用 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/

相关文章:

java - IntelliJ IDEA : how to put maven dependency into correct location of builded artifact

java - 通过 java.lang.Object 检测数组

java - Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

java - 如何使用数据库中的数据填充 JavaFX ChoiceBox?

spring - 无法使用 mvn spring-boot :run 启动组件 Tomcat

java - Maven 无法解析同一多模块项目中模块的依赖关系

java - 如何在运行时引用 Jar 文件位置

java - 拍照后如何在另一个 Activity 中显示图像?

maven - 如何解决异常 : basedir doesnot exist

maven - 如何从 go lang 代码运行 maven 构建