森萌黠 发表于 2025-8-8 16:01:12

MAVEN构建分离依赖JAR

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.jar7. 项目启动问题

根据以上配置后,需要动态指定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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: MAVEN构建分离依赖JAR