MAVEN构建分离依赖JAR
1. 背景说明
在Springboot项目中,项目构建时,默认打包成一个可以执行的jar包.导致单一jar过大.项目部署过程中,需要把依赖的jar包和配置文件都单独存放到指定的文件夹中.
2. 插件配置
- maven-compiler-plugin 用于编译java代码
- maven-jar-plugin 用于构建jar包
- spring-boot-maven-plugin 用于构建Springboot项目
- maven-assembly-plugin 用于打包项目
3. 编译配置
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- maven-compiler-plugin</artifactId>
- <configuration>
-
- <path>
- <groupId>org.projectlombok</groupId>
- lombok</artifactId>
- <version>${lombok.version}</version>
- </path>
- </annotationProcessorPaths>
- </configuration>
- </plugin>
复制代码 4. 构建jar配置
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- maven-jar-plugin</artifactId>
- <configuration>
-
- <manifest>
- <useUniqueVersions>false</useUniqueVersions>
- <mainClass>com.herbert.Application</mainClass>
- </manifest>
- </archive>
- <excludes>
- <exclude>*.properties</exclude>
- <exclude>*.yml</exclude>
- <exclude>**/mapper/*.xml</exclude>
- </excludes>
- </configuration>
- </plugin>
复制代码 5. 构建springboot项目配置
其中主要配置 ZIP\ 为关键配置,打包后的jar包对应MANIFEST.MF配置的启动类为 Main-Class: org.springframework.boot.loader.PropertiesLauncher- <plugin>
- <groupId>org.springframework.boot</groupId>
- spring-boot-maven-plugin</artifactId>
- <configuration>
- <layout>ZIP</layout>
- <includes>
- <include>
- <groupId>non-exists</groupId>
- non-exists</artifactId>
- </include>
- </includes>
- <excludes>
- <exclude>
- <groupId>org.projectlombok</groupId>
- lombok</artifactId>
- </exclude>
- </excludes>
- </configuration>
- </plugin>
复制代码 5. 项目整体打包配置
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- maven-assembly-plugin</artifactId>
- <configuration>
- false</appendAssemblyId>
- <descriptors>
- <descriptor>./package.xml</descriptor>
- </descriptors>
- <outputDirectory>${project.basedir}/dist</outputDirectory>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
复制代码 其中 package.xml文件内容如下- <id>distribution</id>
- <formats>
- <format>zip</format>
- </formats>
-
- <includeBaseDirectory>false</includeBaseDirectory>
- <fileSets>
- <fileSet>
- <directory>src/main/resources/</directory>
- <outputDirectory>/resources</outputDirectory>
- <filtered>true</filtered>
- </fileSet>
- <fileSet>
- <directory>${project.basedir}/script</directory>
- <outputDirectory>/</outputDirectory>
- <filtered>true</filtered>
- </fileSet>
- <fileSet>
- <directory>${project.basedir}/web/</directory>
- <outputDirectory>/resources/static</outputDirectory>
- </fileSet>
- </fileSets>
- <dependencySets>
- <dependencySet>
- <outputDirectory>/lib</outputDirectory>
- <scope>runtime</scope>
- <excludes>
- <exclude>${project.groupId}:${project.artifactId}</exclude>
- </excludes>
- </dependencySet>
- <dependencySet>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>${project.groupId}:${project.artifactId}</include>
- </includes>
- </dependencySet>
- </dependencySets>
- </assembly>
复制代码 fileSets/fileSet/filtered 属性为true时,表示在maven复制文件时,可以把maven的占位符替换成对应的值,比如需要打包文件中包含一个startup.bat文件,项目打包的源文件配置如下:- @echo off
- title ${project.artifactId}-${project.version}-%date%-%time%-%cd%
- java -Dloader.debug=true -jar ${project.artifactId}-${project.version}.jar
复制代码 项目打包后,输出文件内容会改变成如下:- rem 小游戏 地心侠士 by herbert
- @echo off
- title herbert.1.0.0-%date%-%time%-%cd%
- java -Dloader.debug=true -jar herbert-1.0.0.jar
复制代码 7. 项目启动问题
根据以上配置后,需要动态指定PropertiesLauncher的loader.path来加载分离后的lib,以及其他资源文件.这里提供两个实用的方法
- 通过 java -D指定参数
java -jar -Dloader.path=resources,lib,plugin hebert-1.0.0-SNAPSHOT.jar
- 在jar包同级目录下创建loader.properties文件,并添加如下内容
loader.path=resources,lib,plugin
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |