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

相关文章
相关标签/搜索