開發工具:IDEA16
運行環境:ubuntu
問題:根據網上的Idea導出jar包的方法,將我的項目導出jar包后運行報錯:找不到或無法加載主類。
為了找到這個原因,我重新搭建了一個測試例子,在src/com下新建了一個HelloWorld.java類,輸出HelloWorld。然后把它導出jar包,依然報錯:找不到或無法加載主類。
后來打開這個jar包發現在test.jar里邊還有一個test.jar包
然后我把里邊這個jar包提取出來后,運行java -jar test.jar就不會報錯了,也能正常輸出HelloWorld
經過各種重復實驗,重新嘗試每一步的配置,終於發現了錯誤的地方。
根據網上的配置,在 Project Structure --> Artifacts中,添加jar包時,選擇了copy to the out directory and link via manifest
備注:我參考的Idea打jar包的方法鏈接是:http://www.cnblogs.com/blog5277/p/5920560.html
他說:
選中第一個的話,打完包后是一個jar包
選中第二個的話,打完包后是一個jar包,外帶你項目所用的jar包
如果選擇了第二個,在下一步的配置中,就會出現兩個test.jar。可以看到,上一步驟生成了一個test.jar,並且外邊的test.jar還需要再重新創建一個MANIFEST.MF文件
經過測試,即使我創建外邊的MANIFEST.MF文件時,把里面的test.jar包打進去,依然會報錯:找不到或無法加載主類。
綜上所訴, 我又嘗試在最開始選擇配置的時候,如果選擇extract to the target JAR(提取到目標jar包) 這個選項,那么對於我這個測試項目就完全沒問題了,生成的test.jar包里包含MANIFEST.MF文件,並且這個包里不會再有其他的jar包了,就沒有問題了
但是如果我生成的jar包,需要引用其他的jar包,需要在下一步,Class Path欄里手動輸入引入的jar包。
至於這里的classpath如何填寫,相當於在之前錯誤用法時生成的META-INF/MANIFEST.MF文件里所引用的jar包一樣。
原創文章,歡迎轉載,轉載請注明出處!
