jar在Windows上运行,但不在Ubuntu上

问题描述:

我正在使用Maven生成我的项目的所有依赖关系(复制到一个单独的文件夹中)的可运行jar文件。jar在Windows上运行,但不在Ubuntu上

http://pastebin.com/NfhiVZhM(链接到的pom.xml,以避免此副本巨头XML)

我是Windows 10的机器上运行MVN包与JDK 1.8。 mvn运行后,如果我打开cmd并运行java -jar instagramBot.jar一切正常。

Maven生成结果(目标)的文件夹通过Dropbox与具有oracle-jdk-1.8的Ubuntu机器同步。

但如果开在Ubuntu壳,去运行相同的命令,结果是:

[email protected]:~/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包存在于classpath中,并且也存在于Ubuntu机器的libraries文件夹中。但是错误不断发生。

我也检查了任何可能出现在罐子名称中的特殊字符,但我没有发现任何东西。

堆栈跟踪还没有任何futher解释的错误:

Error: A JNI error has occurred, please check your installation and try again

没有人有任何想法可能是什么或什么别的我应该检查,以确定问题?

============== UPDATE ============

所有我使用的库罐子。没有DLL或操作系统特定的文件。

我试图通过Eclipse导出一个可运行的jar文件,并将所有库封装在一个jar(58MB)中,它在Ubuntu上正常工作......我不想使用这个问题,因为我的代码将要改变了很多,我使用的库没有,但如果我把所有东西都打包在一个jar中,每次修复一个小错误,我都需要重新同步58MB,尽管事实上Eclipse过程导出jar很不方便。

+2

JNI是Java本地接口,这是Java如何与本地库进行通信(libs例如在C或C++中专门为OS编写)。您尝试运行的程序是否需要本机库?你有没有在适当的地方的Linux相关的lib? (注意:Windows DLL无法在Linux上运行,您需要一个Linux特定版本的库)。 – Jesper

+0

不!我使用的所有图书馆都是罐子。现在我试图通过eclipse导出一个可运行的jar文件,并将所有库封装在一个jar(58MB)中,它在ubuntu上正常工作... –

+0

错误说检查您的安装。它可能指的是jvm本身 – efekctive

答案就在这里

[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> 
+0

在pom中添加这个信息会停止警告,但并不能解决我的问题,我不断收到错误,现在我得到了Windows和Ubuntu –

+0

事实上,这不是你的建议,使项目停止在Windows上工作...是另一个“修复”的maven建议我,我没有检查...现在问题得到解决。谢谢 –

我解决了这个问题,其实我不明白为什么它解决了,但我很累,试着明白...

如果我运行与pom的mvn包http://pastebin.com/NfhiVZhM我得到两个警告

[WARNING] 
[WARNING] Some problems were encountered while building the effective model for InstagramBot:InstagramBot:jar:2.0.1 
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 26, column 12 
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. 
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects. 

//很多信息输出//

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! 

我也得到一个可运行jar文件,在Windows上工作正常的。 这个罐子的清单看起来像:

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: rafael 
Class-Path: dependency/utils-1.4.3.jar dependency/commons-io-2.5.jar d 
ependency/slf4j-api-1.7.22.jar dependency/slf4j-log4j12-1.7.22.jar de 
pendency/log4j-1.2.17.jar dependency/hibernate-core-5.1.0.Final.jar d 
ependency/jboss-logging-3.3.0.Final.jar dependency/hibernate-jpa-2.1- 
api-1.0.0.Final.jar dependency/javassist-3.20.0-GA.jar dependency/ant 

作为第一个警告是太大了,我只是张贴引擎收录,仅通过addig下面一行在我的maven-JAR-插件后解决它(行寻址上警告)

<version>3.0.0</version> 

简单做这个Maven的变化所造成的舱单:

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: rafael 
Class-Path: dependency/com/tomatechines/utils/1.4.3/utils-1.4.3.jar de 
pendency/commons-io/commons-io/2.5/commons-io-2.5.jar dependency/org/ 
slf4j/slf4j-api/1.7.22/slf4j-api-1.7.22.jar dependency/org/slf4j/slf4 
j-log4j12/1.7.22/slf4j-log4j12-1.7.22.jar dependency/log4j/log4j/1.2. 
17/log4j-1.2.17.jar dependency/org/hibernate/hibernate-core/5.1.0.Fin 

它试图寻找一个仓库结构李bs在我的项目中,但是,复制依赖关系插件只是创建一个文件夹(依赖项)并将所有jar放在里面。所以清单寻找一个永远不存在的文件夹结构,这个jar不会在windows或ubuntu上运行。

将溶液以除去<version>并添加

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

通过@asettouf的建议。现在我已经回来了大警告,但罐子在plataform上工作正常......而且我真的不在乎它在工作时的警告