Maven生成一個可以直接執行的jar包
阿新 • • 發佈:2019-01-11
今天在學習的過程中遇到一個問題除錯了好久,最終解決了。來記錄一下。
問題描述:一個普通的javase的程式,使用maven構建。最終專案完成後使用IDE(我用的是IDEA)可以執行,但是生成的jar包沒辦法直接java -jar通過命令列執行。
原因:maven自帶的package外掛生成的jar包是不帶依賴包的,可以通過解壓縮軟體開啟它生成的預設jar包,發現它只有pom.xml檔案,而沒有真正的依賴包。所以問題就是java -jar命令找不到依賴包中的類,所以報ClassNotFoundException。
解決的辦法:
在pom.xml檔案中的外掛部分加入下面的外掛
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>*****</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>
這裡的<mainClass>*****</mainClass>
中填入執行的主類的全限定名(包+類)。
然後要通過命令列執行:mvn assembly:assembly 之前一直使用IDEA自帶的package外掛直接打包,發現每次生成的還是預設的jar包。所以一定要用命令列自己輸入。會發現在target檔案中會生成兩個檔案,其中一個以
jar-with-dependencies為字尾的就是完整包含依賴包的jar包,可以直接通過命令列的java -jar執行。