maven打jar包-要求项目代码和依赖库分离打包

如何maven分离打包jar和项目(步骤)

第一步:在pom.xml添加依赖 (其中包含5个pulgin标签)分别的功能是
1.打包时排除jar包
2.maven指定打包的编译版本
3.设置maven打包规则
4.在文件manifest.mf添加classpath
5.跳过maven的测试用例插件(建议跳过)

注意:有两点需要自己配置

1.在jar包中含有私包的情况下要在<manifestEntries></manifestEntries>标签中配置<classpath>xxx.xxx.Application</classpath>属性指定启动类的路径(以下代码就配置了一个私有的jar包,因为启动的时候本地依赖需要先启动,在加载lib包。如果本地依赖没有打包到jar内就会启动失败)
2. 此处配置的属性要配置自己项目的启动类

						<manifest>
                            <mainClass>org.springblade.Application</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib</classpathPrefix>
                        </manifest>

以下是5个部分的示例代码

<!--打包时排除jar包-->
				<plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring.boot.version}</version>
                    <configuration>
                        <finalName>${project.build.finalName}</finalName>
                        <layout>ZIP</layout>
                        <includes>
                            <include>
                                <!-- 排除所有Jar -->
                                <groupId>nothing</groupId>
                                <artifactId>nothing</artifactId>
                            </include>
                        </includes>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
<!--maven指定打包的编译版本-->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
<!--设置maven打包规则-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- ${project.build.directory}是maven变量,内置的,表示target目录,如果不写,将在跟目录下创建/lib -->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <!-- excludeTransitive:是否不包含间接依赖包,比如我们依赖A,但是A又依赖了B,我们是否也要把B打进去 默认不打-->
                            <excludeTransitive>false</excludeTransitive>
                            <!-- 复制的jar文件去掉版本信息 true去掉 false 不去-->
                            <stripVersion>false</stripVersion>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
<!--在文件manifest.mf添加classpath-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>org.springblade.Application</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->
                            <!--本地依赖,多个需要使用空格隔开-->
                            <Class-Path>./WarehouseApi.jar/ lib/blade-core-launch-2.8.2.RELEASE.jar</Class-Path>
                        </manifestEntries>
                    </archive>
                    <outputDirectory>${project.build.directory}</outputDirectory>
                </configuration>
            </plugin>
<!--maven的测试用例插件,建议跳过。-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

第二步:执行maven指令
在这里插入图片描述

第三步:生成目录结构在target内,target内文件格式如下图
在这里插入图片描述

第四步:执行java -jar WarehouseApi.jar 命令 启动jar包,结果如下图
在这里插入图片描述

参考链接:
1.(23条消息) SpringBoot分离打Jar包的两种方式_springboot分离jar-CSDN博客
2.https://www.cnblogs.com/exmyth/p/15893890.html

最后附上普通启动代码(jar包为WarehouseApi.jar)

maven打包命令:mvn clean install -Dmaven.test.skip=true
指定jar包启动命令:java -Dloader.path=./lib -jar WarehouseApi.jar
指定jar包启动命令(带配置环境参数):java -Dloader.path=./lib -jar WarehouseApi.jar --spring.profiles.active=dev

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值