2012-01-11 54 views
8

我無法從eclipse中將我的java項目導出爲jar可執行文件。我的java項目使用一個外部庫(稱爲jri)。我導出了jri.jar文件,並在eclipse中爲其本地庫設置了庫路徑,並且它在eclipse中的開發中非常有用。然而,當我出口它作爲一個可執行的JAR文件我得到以下錯誤:在eclipse中導出到帶有額外本地代碼庫的Runnable jar

Cannot find JRI native library! 
Please make sure that the JRI native library is in a directory listed in java.library.path. 

我已經把一個叫LIB在同一目錄作爲我的項目的JAR文件夾;這個lib文件夾包含jri的本地庫。 jri的本地庫不在一個文件中,而是在一個文件夾中。這與eclipse中的設置相同。

我在Eclipse中導出我的項目的方式是

Export... 
Java > Runnable JAR file 
Copy required libraries into a sub folder next to the generated Jar 
Finish 

我的文件夾中組織這樣

folder project 
    project.jar 
    project_lib 
    jri.jar 
    jri native library folder 

我project.jar的MANIFEST.MF是:

Manifest-Version: 1.0 
Class-Path: . project_lib/jri.jar 
Main-Class: index 

我想要實現的是給另一個人一個文件夾,包括project.jar和其他所需的東西,以便她/他可以運行它而無需安裝其他任何東西。 非常感謝

+0

如果你討厭不使用它,不要責怪它。如果日食出現問題,它可能是你的錯,而不是日食。 – ozhan 2012-01-11 07:13:47

+1

檢查這個相似的答案,它migth幫助。 http://stackoverflow.com/questions/2702132/how-can-i-include-platform-specific-native-libraries-in-the-jar-file-using-ecli – ozhan 2012-01-11 07:16:45

+2

您是否嘗試將project_lib/jri_native_library_folder添加到清單中.mf類路徑? – KJP 2012-01-12 18:28:07

回答

8

添加含有腳本類似的東西:

#!/bin/bash 
java -Djava.library.path=project_lib/native/ -jar project_lib/jri.jar 

我出口一些Java項目的方式。

1

你可以把庫裏面罐子:

Export...

Java > Runnable JAR file

Package required libraries into generated Jar

Finish

我總是出口這條路。 我不知道它是否適用於您的情況,但值得一試。


編輯:

請參見以下鏈接:

我的猜測是,這必須是與LD_LIBRARY_PATH不correc tly已被設置。或者它正在搜索的文件不在列出的路徑中。

+0

我試過了,但它不起作用,請記住外部程序包的本地庫位於一個文件夾中,並且java.library.path需要有權訪問它。 – 2012-01-13 16:23:33

+1

@JulioDiaz:看到編輯,我希望能幫助你。 – falsarella 2012-01-13 16:50:28

+1

爲我的案件工作。 – 2016-03-26 21:06:15

3

這實現起來相對困難。我所看到的解決方案涉及將JAR中的本地庫提取到OS臨時目錄,然後加載它。我會爲此提供一個集成的解決方案。 One JarJava Class Loader支持它,並在第二頁上找到類似工具的鏈接。

+0

您說得對,據我所知,Java無法從JAR文件加載JNI庫(.dll,.so等)。您提到的解決方案在運行時提取相關文件,以便Java可以加載它們。 – ChrisJ 2012-01-19 22:49:24

0

你知道我有類似的問題

Could not extract native JNI library. 

所有上述建議也幫不了我。我不能停下來,通過如下命令啓動守護程序的gradle:

gradle --stop 

我看到gradle這個守護進程仍然在我的進程沒有停止過。這就是爲什麼我在我的過程中殺了它,一切都會好:)

相關問題