2017-02-13 354 views
4

如何將外部庫添加到IntelliJ IDEA中的項目中,以便在構建工件時仍可訪問庫中的類?將外部庫添加到IntelliJ IDEA中的工件jar中

我已經從Project Structure創建了一個新的Jar工件,然後將外部JAR添加到庫中,然後在模塊列表中將其檢查並最終將其添加到工件的輸出中。這些都不起作用。當我建立並嘗試運行我的應用程序,它拋出一個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: <path of the class trying to use>

我缺少什麼,還是我做這完全錯了嗎?

回答

6

你有2個選擇這裏:

  • 提取的依賴到神器罐子,這樣應用程序是與所有的依賴
  • 鏈接通過Manifest.MF依賴罐子單可執行的JAR和近複製它們應用程序主罐

我準備了一個演示兩種方法的示例項目:HelloWithDependencies.zip

工件被製作成out\singleout\linked目錄。

相關配置:

single

linked

+1

你剛剛幫我解決了我花了超過25個小時,也許2個星期,試圖破譯的問題。非常感謝你! 此外,這項工作和所有,但它背後的主幹是什麼? IntelliJ是否使用Maven或Ant或類似的東西? –

+1

您可以使用基於Maven的項目,是的,但它與您擁有的情況無關。當您向項目添加新的依賴項時,它們不會自動添加到您已有的項目中,您需要再次查看項目配置並添加從jar中運行應用程序所需的所有缺失庫。另一個常見的錯誤是在另一個罐子裏包含一個不可用的罐子,該罐子必須在主罐子內部解包或者在其附近複製並通過清單鏈接(不要忘記添加任何新的罐子到清單中,案件)。 – CrazyCoder

+1

在基於Maven的項目中,可以使用Maven插件創建具有依賴關係的JAR,並且您將通過運行Maven目標而不是使用IntelliJ IDEA工件配置來生成最終工件。這樣,你添加到'pom的所有新的依賴關係。xml'會自動出現在Maven生成的jar中。幾乎相同的情況適用於基於Gradle的項目。 – CrazyCoder

1

如果您使用maven構建應用程序,那麼這不是添加外部庫的正確方法。你應該要麼

  1. 做一個像你的庫的安裝如下mvn install:install-file -Dfile=myJar.jar -DgroupId=com.yourproject -DartifactId=yourproject -Dversion={version} -Dpackaging=jar
  2. 使用系統路徑,如解釋here

選項1是首選,因爲您不必將jar留在項目中。

+0

其實我不知道,如果正在使用Maven的。我還沒有創建任何生成文件。不知道IDEA如何做,但我的假設是不需要構建文件。所有這些都是MANIFEST.MF文件。 –