当前位置: 首页 > news >正文

Maven 多配置文件的使用

文章目录

  • 1. 一般常见的打包方式如下(全量包FatJar)
  • 2. 增量包(ThinJar)

1. 一般常见的打包方式如下(全量包FatJar)

  • FatJar打包时,所有依赖的jar包会一并打包,并且打包好的jar可以直接使用java -jar执行,一般来说整个可执行jar包大约会有几十上百兆不等。
<build><plugins><!-- 默认的打包插件,用来打普通的project JAR包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><addDefaultImplementationEntries>true</addDefaultImplementationEntries><addDefaultSpecificationEntries>true</addDefaultSpecificationEntries></manifest></archive></configuration><executions><execution><id>default-jar</id><phase>package</phase><configuration><excludes><exclude>config/**</exclude><exclude>*.yml</exclude><exclude>logback-spring.xml</exclude><exclude>banner.txt</exclude></excludes><classifier>assembly</classifier></configuration><goals><goal>jar</goal></goals></execution><execution><id>full-jar</id><phase>package</phase><configuration><classifier>full</classifier></configuration><goals><goal>jar</goal></goals></execution></executions></plugin><!-- 将Spring Boot应用打包为可执行的jar或war文件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><id>default</id><phase>package</phase><configuration><classifier>assembly</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution><execution><id>full-jar</id><phase>package</phase><configuration><classifier>full</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution></executions></plugin><!-- 支持自定义的打包结构,也可以定制依赖项等,该项目的对应配置文件在src/assembly下 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId></plugin></plugins>
</build>

2. 增量包(ThinJar)

  • 相比于FatJar,ThinJar会将依赖的jar包拷贝到业务jar包外部,这样业务jar包的大小会非常小,并且支持jar包或文件级别的升级
<profiles><profile><!--标识符,用于给这个 Maven Profile 命名--><id>fat-jar</id><properties><packaging.type>jar</packaging.type></properties><activation><!--Profile 在没有指定其它激活条件时,会自动激活,Maven 会在构建时默认使用这个 Profile。通常这种情况适用于应用程序的常规构建配置--><activeByDefault>true</activeByDefault></activation><build><plugins><!--这段配置主要是通过 maven-jar-plugin 插件生成 JAR 文件时的细节控制。它定义了两个执行目标:default-jar 和 full-jar,分别生成不同类型的 JAR 文件:1、default-jar 生成一个名为 myproject-assembly.jar 的 JAR 文件,并排除了特定文件(如 config/**、.yml 文件等)。通常用于构建一个轻量级的 JAR 文件,不包含不必要的配置文件(如 .yml 文件等)2、full-jar 生成一个名为 myproject-full.jar 的完整 JAR 文件,包含所有依赖和文件用于构建一个完整的 JAR 文件,通常包含所有的依赖和资源文件,适用于需要完整打包的场景--><plugin><!--Maven 用来创建 JAR 文件的官方插件--><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><!--配置 JAR 文件的归档行为,主要是关于 MANIFEST.MF 文件的配置--><archive><!--用于配置 JAR 文件的 MANIFEST.MF 文件,这个文件存储了 JAR 的元数据--><manifest><!--设置为 true 后,会自动将 JAR 的实现版本和实现标题等信息添加到 MANIFEST.MF 中--><addDefaultImplementationEntries>true</addDefaultImplementationEntries><!--设置为 true 后,会将 JAR 的规范版本和规范标题等信息添加到 MANIFEST.MF 中--><addDefaultSpecificationEntries>true</addDefaultSpecificationEntries></manifest></archive></configuration><!--执行配置--><executions><execution><!--执行步骤的唯一标识符--><id>default-jar</id><!--指定插件执行的生命周期阶段,这里是在 package 阶段执行--><phase>package</phase><!--配置该执行的参数--><configuration><!--配置哪些文件或目录不应该被包含在 JAR 文件中。这里排除了 config/** 目录、所有 .yml 文件、logback-spring.xml 和 banner.txt 文件--><excludes><exclude>config/**</exclude><exclude>*.yml</exclude><exclude>logback-spring.xml</exclude><exclude>banner.txt</exclude></excludes><!--设置为 assembly,这意味着生成的 JAR 文件将被标记为-assembly.jar。例如,构建过程中可能会生成一个名为 myproject-assembly.jar 的文件。--><classifier>assembly</classifier></configuration><!--指定该执行的目标,这里是 jar,表示生成 JAR 文件--><goals><goal>jar</goal></goals></execution><!--full-jar 执行配置--><execution><id>full-jar</id><phase>package</phase><!--设置为 full,这意味着生成的 JAR 文件将被标记为 -full.jar。例如,构建过程中可能会生成一个名为 myproject-full.jar 的文件。--><configuration><classifier>full</classifier></configuration><!--目标仍然是 jar,表示该执行也会生成一个 JAR 文件--><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><!--通过 default 和 full-jar 两个执行目标,生成了两种分类符不同的 JAR 文件(-assembly.jar 和 -full.jar)--><!--Spring Boot 提供的官方 Maven 插件,用于支持 Spring Boot 应用程序的构建、打包和相关任务--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><!--定义了两个执行目标,分别是 default 和 full-jar,均在 Maven 构建生命周期的 package 阶段执行--><execution><!--标识此执行目标--><id>default</id><!--在打包阶段运行该目标--><phase>package</phase><configuration><!--指定生成的 JAR 文件的分类符,这里为 assembly,因此生成的文件名形如 project-assembly.jar--><classifier>assembly</classifier></configuration><goals><!--生成构建信息文件(如 build-info.properties),包括版本、构建时间等--><goal>build-info</goal><!--将项目重新打包为可执行的 JAR 文件(fat JAR),包含所有依赖和资源--><goal>repackage</goal></goals></execution><execution><!--标识此执行目标--><id>full-jar</id><!--在打包阶段运行该目标--><phase>package</phase><configuration><!--设置分类符为 full,生成的文件名形如 project-full.jar--><classifier>full</classifier></configuration><goals><!--生成构建信息文件--><goal>build-info</goal><!--将项目重新打包为完整的可执行 JAR 文件--><goal>repackage</goal></goals></execution></executions></plugin><plugin><!--Maven 官方插件--><groupId>org.apache.maven.plugins</groupId><!--用于生成复杂的分发包,比如将 JAR 文件、配置文件、文档等资源打包成 ZIP 或 TAR 文件--><artifactId>maven-assembly-plugin</artifactId></plugin></plugins></build></profile><profile><id>thin-jar</id><properties><packaging.type>jar</packaging.type></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.2</version><configuration><archive><manifest><!--会将实现和规范版本的信息添加到 MANIFEST.MF 文件中--><addDefaultImplementationEntries>true</addDefaultImplementationEntries><addDefaultSpecificationEntries>true</addDefaultSpecificationEntries></manifest></archive><excludes><!--排除了 config/**(配置目录)、.yml 文件、logback-spring.xml 和 banner.txt 文件--><exclude>config/**</exclude><exclude>*.yml</exclude><exclude>logback-spring.xml</exclude><exclude>banner.txt</exclude></excludes><!--设置为 bootapp,生成的 JAR 文件名会以 -bootapp.jar 结尾--><classifier>bootapp</classifier></configuration></plugin><plugin><!--将运行时类路径信息写入瘦 JAR 的 MANIFEST.MF 文件,属性名为 Xdr-Thin-Classpath--><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>3.0.0</version><executions><execution><id>write-classpath</id><phase>package</phase><configuration><target><!--引用 Maven 的运行时类路径--><property name="runtime_classpath" refid="maven.runtime.classpath"/><!--目标文件为 -bootapp.jar--><jar destfile="${project.build.directory}/${project.artifactId}-${project.version}-bootapp.jar" update="true"><manifest><attribute name="Xdr-Thin-Classpath" value="${runtime_classpath}"/></manifest></jar></target></configuration><goals><goal>run</goal></goals></execution></executions></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--指定无效的依赖项来避免打包实际的依赖文件--><includes><include><groupId>not.exists.groupId</groupId><artifactId>not.exists.artifactId</artifactId></include></includes></configuration><executions><execution><id>default</id><phase>package</phase><configuration><classifier>bootapp</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution></executions><dependencies><!--引入自定义的打包格式--><!--扩展spring boot maven plugin,重新制定可执行jar包的Launcher类--><dependency><groupId>com.xdr630</groupId><artifactId>xdr-boot-thin-layout</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.1.1</version><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions><configuration><descriptors><descriptor>src/assembly/assembly_thin.xml</descriptor></descriptors><outputDirectory>target</outputDirectory></configuration></plugin></plugins></build></profile><profile><id>war</id><properties><packaging.type>war</packaging.type></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency></dependencies><build><finalName>myproject</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.1.0</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml><archive><manifestEntries><Dependencies>jdk.unsupported</Dependencies></manifestEntries></archive></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><id>default</id><phase>package</phase><goals><goal>build-info</goal><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></profile>
</profiles><distributionManagement><repository><id>maven-release</id><name>Nexus Release Repository</name><url>http://xxx:8081/repository/maven-releases/</url></repository><snapshotRepository><id>maven-snapshots</id><name>Nexus Release Repository</name><url>http://xxx:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>
  • 注意:这里一定要指定maven-assembly-plugin插件的版本为3.1.1+,否则会出现依赖包打包不正确的bug
<?xml version='1.0' encoding='UTF-8'?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"><!-- 打包完成后文件名以“-bin”结尾 --><id>bin</id><formats><!-- 压缩格式为tar.gz --><format>tar.gz</format></formats><includeBaseDirectory>true</includeBaseDirectory><!-- 文件拷贝 --><fileSets><!-- bin目录: 拷贝运维脚本(Windows) --><fileSet><directory>${project.basedir}/src/bin</directory><outputDirectory>bin</outputDirectory><includes><include>*_thin.bat</include><include>shutdown.bat</include></includes><lineEnding>dos</lineEnding></fileSet><!-- bin目录: 拷贝运维脚本(Linux)--><fileSet><directory>${project.basedir}/src/bin</directory><outputDirectory>bin</outputDirectory><includes><include>*_thin.sh</include><include>shutdown.sh</include></includes><lineEnding>unix</lineEnding><fileMode>0755</fileMode></fileSet><!-- conf目录: 从编译目录拷贝配置文件 --><fileSet><directory>${project.build.directory}/classes</directory><outputDirectory>conf</outputDirectory><includes><!-- 若有漏掉的配置文件,可以在这里添加规则 --><include>config/**</include><include>*.yml</include><include>logback-spring.xml</include><include>banner.txt</include></includes></fileSet><!-- lib/bootapp目录: 保存业务jar包,加载jar包时首先从bootapp目录加载 --><fileSet><directory>${project.build.directory}</directory><outputDirectory>lib/bootapp</outputDirectory><includes><include>*-bootapp.jar</include></includes></fileSet></fileSets><!-- 依赖包拷贝 --><dependencySets><!-- lib/xdr目录: 拷贝xdr相关的包 --><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib/xdr</outputDirectory><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><includes><!-- groupId:artifactId,支持通配符 --><include>com.xdr630*:*</include></includes></dependencySet><!-- lib/spring目录: 拷贝spring相关的包 --><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib/spring</outputDirectory><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><includes><include>org.springframework*:*</include></includes></dependencySet><!-- lib/others目录: 拷贝无法归类的包相关的包 --><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib/others</outputDirectory><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><excludes><exclude>org.springframework*:*</exclude><exclude>com.xdr630*:*</exclude></excludes></dependencySet><!-- 如果还有自定义的分包规则,可以在这里添加 --></dependencySets>
</assembly>
http://www.dtcms.com/a/520714.html

相关文章:

  • 【双机位A卷】华为OD笔试之【哈希表】双机位A-跳房子I【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • SQL 拼接完全指南
  • 制作的网站wordpress还是自己写
  • 【HLS】Java实现统计HLS的m3u8清单中所有ts切片的视频持续时长
  • 免费网站建设ppt模板下载山西省建设银行网站首页
  • 增城网站建设价格郑州seo
  • 【Rust实战】从零构建高性能异步Web服务器:深入理解所有权与生命周期
  • Vlan-ACCESS接口+Trunk接口
  • 网站开发遇到的最大困难被k掉的网站怎么做才能有收录
  • SpringBoot-Web开发之文件上传
  • 5.2 类
  • 厦门协会网站建设电影网站做淘客
  • 网站建设介绍书如何注销公司流程及费用
  • 阿里国际站网站建设wordpress mysql 扩展
  • LeetCode 405 - 数字转换为十六进制数
  • 漳州做网站喊多少钱wordpress栏目更改无法显示
  • 集团公司网站欣赏如何做企业网站内链
  • 未来的 AI 操作系统(九)——灵魂架构:当智能系统拥有“自我”
  • 卡码网语言基础课(Python) | 20.排队取奶茶
  • ManySpeech —— 使用 C# 开发人工智能语音应用
  • 5G-A 与 5G 对比
  • 网站建设与 宣传关系wordpress 订单
  • Linux进程信号(贰):保存信号
  • 互联网站建设 天津台州网站建设惠店
  • 基于Python大数据的主流汽车价格分析可视化系统
  • Flutter状态管理原理详解
  • 如何选择网站项目企业营销推广怎么做
  • MCP Server 启动和应用
  • C语言通过函数实现素数验证
  • 软件无线电关键技术--基带QPSK 调制技术