1. 程式人生 > >Maven生成一個可以直接執行的jar包

Maven生成一個可以直接執行的jar包

今天在學習的過程中遇到一個問題除錯了好久,最終解決了。來記錄一下。
問題描述:一個普通的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執行。