onejar-maven-plugin把java類與lib打包爲一個可運行jar

一、問題背景

咱們有時要開發一個Java Application,就是main來直接運行的那種,雖然有好多工具能夠幫助咱們打爲jar。
但會有如下兩個問題:java

第一種是須要lib目錄依賴一塊兒來運行。(須要依賴文件,一個jar不能夠運行)
第二種就是是把其它依賴的jar解開和你的類放在一個jar中。(框架的限制,包依賴之間的衝突,解壓替換內容的過程產生類與資源的混亂)apache

第一種的問題顯而易見須要copy太多東西(lib/*.jar)太麻煩。
第二種雖然能夠作到一個jar運行的效果,但由於是解開再合再一塊兒,尤爲是jar中類有衝突時將和你在ide中不解開執行的效果不同。(如eclipse能夠運行,打包出來就不能夠運行)框架

二、用One-JAR來解決

這個工具很好的解決了這一點,它至關於作一了一個啓動殼。能夠不改變你的jar與依賴的jar包,也不用解開。
簡單理解就是jar中有jar。運行能夠達到ide或配類路徑運行同樣的效果。eclipse

One-JAR有maven下的插件onejar-maven-plugin,因此對於maven的jar工程來講打包很方便。
pom.xml只須要加入如下plugin內容maven

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>org.noahx.onejartest.Launcher</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.jolira</groupId>
                <artifactId>onejar-maven-plugin</artifactId>
                <version>1.4.4</version>
                <executions>
                    <execution>
                        <configuration>
                            <attachToBuild>true</attachToBuild>
                            <classifier>onejar</classifier>
                        </configuration>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

maven-jar-plugin你們比較熟悉,主要的加啓動類。ide

onejar-maven-plugin是咱們的主角。有了它,你再運行mvn package時,就會多生成一個xxxxxx.one-jar.jar文件。工具

這個文件直接能夠java -jar xxxxxx.one-jar.jar來單獨運行。
並且就這一個jar。不須要其它依賴。copy起來很方便。ui

相關文章
相關標籤/搜索