maven提取依赖到jar包外部---assembly

场景

项目生成的jar文件太大,主要是因为依赖项太多,每次更新代码,打包部署时都需要花费很长的时间重复上传这些依赖项,故考虑将依赖项提取到jar包外部。这样依赖项和源码分开上传,每次更新迭代,只要依赖项不变,部署时只需上传源码编译的jar包即可。

pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <!-- 配置启动类 -->
                            <mainClass>
                                com.example.TestApplication
                            </mainClass>
                            <!-- 添加依赖路径 -->
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
<!--                        <manifestEntries>-->
<!--                            <Class-Path>./</Class-Path>-->
<!--                        </manifestEntries>-->
                    </archive>
<!--                    <excludes>-->
<!--                        <exclude>config/**</exclude>-->
<!--                    </excludes>-->
                </configuration>
            </plugin>
            <!-- Maven Assembly Plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <!-- not append assembly id in release file name -->
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <!--打包的详细描述,需要配置额外文件-->
                        <descriptor>assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <!-- 配置执行器 -->
                    <execution>
                        <id>make-assembly</id>
                        <!-- 绑定到package命令的生命周期上 -->
                        <phase>package</phase>
                        <goals>
                            <!-- 只运行一次 -->
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

assembly/assembly.xml

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 https://maven.apache.org/xsd/assembly-2.1.0.xsd">
    <id>package</id>
    <formats>
        <!--压缩文件的类型-->
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <!--需要包含的文件与输出的路径-->
<!--        <fileSet>-->
<!--            <directory>src/main/bin</directory>-->
<!--            <outputDirectory>bin/</outputDirectory>-->
<!--        </fileSet>-->
<!--        <fileSet>-->
<!--            <directory>src/main/resources</directory>-->
<!--            <outputDirectory>/</outputDirectory>-->
<!--        </fileSet>-->
        <fileSet>
            <!-- 提取jar文件到外部 -->
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <!-- 提前依赖到lib文件夹 -->
            <outputDirectory>lib</outputDirectory>
            <scope>runtime</scope>
            <excludes>
                <exclude>${groupId}:${artifactId}</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

打包

mvn clean package

生成文件
在这里插入图片描述

运行

解压test-0.0.1.tar.gz
在这里插入图片描述
执行

java -jar test.0.0.1.jar

猜你喜欢

转载自blog.csdn.net/weixin_43932590/article/details/128562870