天天看點

執行 Maven 編譯的 jar,找不到相關的 依賴的類--使用 maven-assembly-plugin 解決

用 maven 編譯完成後 ,生産了 <code>ui-compressor-1.0.0.jar</code>, 此時執行

提示下面找不到依賴的包:

解壓 jar ,發現隻有程式的主檔案在,其他的依賴的包都不見,當然無法正常運作。

在項目 pom.xml 中添加 maven-assembly-plugin:

其中,<code>mainclass</code> 是你的程式主入口檔案

編譯、安裝依賴

執行:

成功運作了

執行 Maven 編譯的 jar,找不到相關的 依賴的類--使用 maven-assembly-plugin 解決

maven-assembly-plugin 插件主要是為了允許使用者輸出項目及其依賴關系、子產品、網站文檔和其他檔案到一個單獨的可釋出的文檔中。

目前支援釋出的格式有:

zip

tar

tar.gz (or tgz)

tar.bz2 (or tbz2)

jar

dir

war

及其他由 archivemanager 配置的任意格式

使用該插件隻需三步:

配置 assembly 插件到項目的 pom.xml,

項目中運作 "mvn assembly:single"

将要使用 assembly descriptor 的,填入 <code>&lt;descriptorrefs&gt;/&lt;descriptorref&gt;</code> 參數即可。如果使用自定義的 assembly descriptor 配置 你的 descriptor 路徑到 <code>&lt;descriptors&gt;/&lt;descriptor&gt;</code> 參數。

注意裝配的單個調用 assembly 插件可以從多個 descriptor 産生 assembly,這樣最大的靈活性允許您自定義項目的二進制檔案項。

舉例,現在項目要生産 jar ,編譯檔案中要包含項目的依賴,配置如下:

注意 assembly 插件允許你使用多個 <code>descriptorrefs</code>,産生不同的assembly.

另外,我們已經建立了一個自定義 descriptor 名字叫 <code>src.xml</code> 在 src/assembly ,可以這樣使用:

将 <code>single</code> 目标綁定到項目的生命周期,配置如下

打包:

當編譯完成,target 目錄下,生産了一個 jar

一旦您建立了這個獨立的 jar,就可以通過 -jar 在 jvm 運作。

通過 mainclass 來配置 jar 中的 main-class 屬性:

再次編譯 meta-inf/manifest.mf 中可以看到

注意隻有 jar 和 war 的 assembly 格式支援<code>&lt;archive&gt;</code>配置

參考:

<a href="http://maven.apache.org/plugins/maven-assembly-plugin/">http://maven.apache.org/plugins/maven-assembly-plugin/</a>