maven打包问题

如何将maven打包成一个可执行的jar包

maven打包有三种方式

  • maven-jar-plugin maven 默认打包插件【springboot默认使用该方式打包】,用来创建 project jar
  • maven-shade-plugin 用来打可执行包,可以直接使用java -jar 包名.jar运行
  • maven-assembly-plugin 支持定制化打包方式,例如 apache 项目的打包方式

这里主要介绍前两种,我用的第二种,完美运行

1. maven-jar-plugin

该方式需要在打完的包同级目录创建一个lib目录来存放所依赖的jar包

<build>
   <plugins>
       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <!-- 可执行jar包需要指定入口函数 然后通过java -jar执行 -->
                        <mainClass>类的全路径名称</mainClass>
                        <!-- 是否添加依赖的jar路径配置 -->
                        <addClasspath>true</addClasspath>
                        <!-- 依赖的jar包存放位置,和生成的jar放在同一级目录下 -->
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
                <!-- 不打包com.artisan.excludes下面的所有类 -->
                <excludes>com/artisan/excludes/*</excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

2. Shade打包:maven-shade-plugin

该插件有两大功能

  • 将依赖的jar包打到当前jar包(常规打包不会讲所依赖的jar包打进去)
  • 对依赖的jar包重命名(用来隔离类)
    -缺点是打包后的jar包包含所有依赖包,包体积较大

使用该插件打完包是一个可执行的jar包,该包中包含了项目中所有的第三方包

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <!--默认情况下,通过mvn package生成的jar包中因为没有指定Main-Class属性,因此并不能使用-jar配置直接运行。需要配置Main-Class。-->
                            <!--mainClass可有可无,加上的话则直接生成可运行jar包 通过java -jar xxx.jar执行-->
                            <!--<transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.example.App</mainClass>
                                </transformer>
                            </transformers>-->
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

maven-assembly-plugin

日常使用较多的是该插件,因为他可以使用配置的方式来让打包后的文件清晰有条理

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${maven-assembly-plugin.version}<version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <!-- 绑定到package生命周期 -->
                    <phase>package</phase>
                    <goals>
                        <!-- 只运行一次 -->
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- 配置描述符文件 -->
                <descriptor>src/main/assembly/assembly.xml</descriptor>
                
                <!-- 也可以使用Maven预配置的描述符,默认打包所有
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs> -->
            </configuration>
        </plugin>
    </plugins>
</build>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值