2017-03-17 69 views
3

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

回答

1

答案就在這裏

[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建議我,我沒有檢查...現在問題得到解決。謝謝 –

1

我解決了這個問題,其實我不明白爲什麼它解決了,但我很累,試着明白...

如果我運行與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上工作正常......而且我真的不在乎它在工作時的警告

相關問題