Skip to content
<

maven将依赖一起打进jar里(解压依赖和不解压依赖方式)

使用maven-assembly-plugin插件。

打包方式分两种,一种是把第三方jar包解压成class再加入进我们的jar包中,另一个则是不解压直接把jar包加入我们的jar中。

解压依赖的方式:

xml
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <!--可以不指定主类-->
                            <mainClass>tdt.tile.picker.Main</mainClass>
                        </manifest>
                    </archive>
                    <!--  这个的意思是依据一个id为“jar-with-dependencies”的配置文件内容来执行打包
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>-->

                    <descriptors>
                        <!--这里的意思是依据指定的配置文件进行打包-->
                        <descriptor>src/main/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
</build>

配置文件的内容:

xml
<assembly>
    <id>with-dependence</id><!-- 配置文件的标识,同时生成的jar包名字会把这个文本包含进去 -->
    <formats>
        <format>jar</format><!-- 打包类型,此处为jar -->
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <unpack>true</unpack><!-- 是否解压 -->
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

效果:

解压

不解压依赖的方式:

Build的内容与上面一致,只是在配置文件里面把unpack改成false即可:

xml
<assembly>
    <id>with-dependence</id><!-- 配置文件的标识,同时生成的jar包名字会把这个文本包含进去 -->
    <formats>
        <format>jar</format><!-- 打包类型,此处为jar -->
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <unpack>false</unpack><!-- 是否解压 -->
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

效果: