如何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