Java--SpringBoot-13-Spring Boot Maven Plugin-04

简介: Spring Boot Maven Plugin可以配置打包的内容,对包中的内容进行layers-分层。

Spring Boot Maven Plugin可以配置打包的内容,对包中的内容进行layers-分层。

jar or war 的分层

       jar包含应用程序的类BOOT-INF/classes和依赖项和BOOT-INF/lib。

      war包含了应用程序的类WEB-INF/classes、依赖关系WEB-INF/lib、WEB-INF/lib-provided。

       Spring Boot Maven Plugin能够进一步分隔这些目录,以便可以将它们写入不同的层,比如需要从jar或war的内容中构建docker映像的时候,先知道能分层,对于构建映像以后在研究。

       分层打包和常规的jar或war是相同的布局,但包括描述每个图层的附加元数据文件。

默认情况下,定义了以下层:

  • dependencies对于其版本不包含的任何依赖项SNAPSHOT。
  • spring-boot-loader 用于加载程序类。
  • snapshot-dependencies对于其版本包含的任何依赖项SNAPSHOT。
  • application 用于本地模块依赖性,应用程序类和资源。

       如果一个模块依赖关系已经被安装到Maven的本地缓存中,但是它不是当前构建的一部分,那么它将被识别为常规依赖关系,通过查看当前构建中的所有模块来确定模块依赖性。

       嘛的,官网这意思英文说起来要绕这么长,用咱们中文说就一句:分层可以一眼看到模块之间的依赖关系。

       上面的四个层确定了部分应用程序更改时可以缓存先前的层的可能性。默认顺序为dependencies,spring-boot-loader,snapshot-dependencies,application。应该首先添加最不可能更改的内容,然后添加更可能更改的层。

       重新打包,也就是repackage的包默认包含 layers.idx文件。要禁用layers的话,可以如下设置:

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><layers><enabled>false</enabled></layers></configuration></plugin></plugins></build></project>

image.png

自定义layers层配置

       可以使用一个单独的配置文件来调整图层的创建方式和添加新图层:

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><layers><enabled>true</enabled><!--project.basedir不需要自己搞,默认就是你的项目路径--><configuration>${project.basedir}/src/layers.xml</configuration></layers></configuration></plugin></plugins></build></project>

接着按照定义的路径来创建layers.xml:

<layersxmlns="http://www.springframework.org/schema/boot/layers"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/boot/layershttps://www.springframework.org/schema/boot/layers/layers-2.5.xsd"><application><!--声明spring-boot-loader层的内容。--><intolayer="spring-boot-loader"><include>org/springframework/boot/loader/**</include></into><!-- 声明 application层的所有剩余类和资源。--><into layer="application" /></application><dependencies><!-- 声明的所有模块依赖项application.layer --><into layer="application"><includeModuleDependencies /></into><!-- 声明该snapshot-dependencies层的所有SNAPSHOT依赖项  --><into layer="snapshot-dependencies"><include>*:*:*SNAPSHOT</include></into><!-- 要求保留该dependencies层的所有内容(在这种情况下,不是SNAPSHOT的任何依赖项)。--><into layer="dependencies" /></dependencies><!-- 定义<into>块的顺序通常与写入层的顺序不同。因此,必须始终包含<layerOrder>元素,并且必须覆盖这些<into>块引用的所有层。--><layerOrder><layer>dependencies</layer><layer>spring-boot-loader</layer><layer>snapshot-dependencies</layer><layer>application</layer></layerOrder></layers>

这里配置不对的话,控制台会报错滴,根据错误提示修改就好了,奥里给!看看打出来的包内容:

image.png

下面来看一下layers.xml配置文件!

layers.xml包含三个节点:

  • <application>定义了应如何对应用程序类和资源进行分层。
  • <dependencies>定义了应如何分层依赖关系。
  • <layerOrder>定义了应写入层的顺序。

1.<application>和<dependencies>节点下都有 <into>节点,通过<into>节点的 layer属性来声明layer层的内容。然后在<into>节点下通过<into>嵌套<include>和<exclude>元素声明哪个是包含,哪个来排除!

2.牛逼了,看到那个*了哇,还支持通配符,直接标识所有哈!

3.<dependencies>使用group:artifact[:version]模式,提供了<includeModuleDependencies />和<excludeModuleDependencies />元素,可用于包括或排除本地模块依赖性。

如果<include>未定义,则考虑所有内容(较早的块未声明)。

如果<exclude>未定义,则不应用任何排除项。

4.定义<into>块的顺序通常与写入层的顺序不同。因此,必须始终包含<layerOrder>元素,并且必须覆盖这些<into>块引用的所有层。


总结:

       layers 的作用是可以启用层配置,并提供自定义层配置文件。



END

目录
相关文章
|
2月前
|
IDE Java Maven
Spring Boot之如何解决Maven依赖冲突Maven Helper 安装使用
Spring Boot之如何解决Maven依赖冲突Maven Helper 安装使用
14 2
|
3月前
|
Java Maven
java修改当前项目的maven仓库地址为国内
修改当前项目的maven仓库地址为国内
|
2月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程)
【2月更文挑战第13天】《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程) 上一篇文章,宏哥已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中给小伙伴们 或者童鞋们演示一下。
66 1
|
1天前
|
Java 测试技术 项目管理
Java基础教程(22)-构建工具Maven的基本使用
【4月更文挑战第22天】Maven是Java项目管理及构建工具,简化构建、测试、打包和部署等任务。遵循约定优于配置原则,核心是`pom.xml`配置文件,用于管理依赖和项目信息。安装涉及下载、解压、配置环境变量。在IDEA中使用Maven创建项目,通过`pom.xml`添加依赖和管理版本。常用命令包括`clean`、`compile`、`test`、`package`、`install`和`deploy`。IDEA支持直接执行这些命令。
|
7天前
|
Java Maven Kotlin
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
|
15天前
|
Java Apache 项目管理
使用Maven进行Java项目构建与依赖管理
【4月更文挑战第16天】Apache Maven是Java项目的核心构建工具,它基于POM进行项目管理和构建自动化,简化构建过程并管理依赖。Maven提供标准化的目录结构、自动依赖解决、丰富的插件生态、多模块构建支持和版本管理功能。通过安装Maven、创建项目、配置依赖、构建及使用插件,开发者能高效管理Java项目,提升开发效率。了解和掌握Maven对于Java开发者至关重要。
|
19天前
|
Java 应用服务中间件 Maven
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
14 1
|
21天前
|
Java Maven Spring
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)2
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)
18 2
|
21天前
|
Java Maven 开发工具
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)1
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)
21 2
|
28天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
【4月更文挑战第3天】Maven是Java社区的标准项目管理工具,简化构建过程,自动化依赖管理和构建生命周期。它提供中央仓库下载库,支持多模块项目,且有插件机制执行各种任务。在Java Web开发中,Maven用于创建项目结构、管理依赖、自动化构建及运行插件。遵循最佳实践,如默认约定、使用版本控制和profiles,结合持续集成工具,能大幅提升开发效率。学习和使用Maven对提升Java Web开发效率至关重要。