maven生命周期介绍;maven-dependency-plugin讲解;maven-resources-plugin讲解;docker-maven-plugin简单讲解

知识总是在总结中发酵的,去年在公司做过容器化相关的东西,涉及到制作发布包等内容,对maven有了进一步的理解,但是一直没有时间整理,最近找些时间总结一下,希望对大家也有帮助吧
感谢技术人们来看,相逢即缘分~请入座
翠花,切一根面肠!热一杯酒!

文章内容

  1. maven生命周期都有哪些?都什么含义
  2. 介绍下maven-dependency-plugin的作用以及常用配置
  3. 介绍下maven-resources-plugin的作用以及常用配置
  4. 介绍下maven-assembly-plugin的作用以及常用配置
  5. 介绍下docker-maven-plugin的作用以及常用配置
<component>
    <role>org.apache.maven.lifecycle.Lifecycle</role>
    <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
    <role-hint>default</role-hint>
    <configuration>
        <id>default</id>
 
        <phases>
            <phase>validate</phase>
            <phase>initialize</phase>
            <phase>generate-sources</phase>
            <phase>process-sources</phase>
            <phase>generate-resources</phase>
            <phase>process-resources</phase>
            <phase>compile</phase>
            <phase>process-classes</phase>
            <phase>generate-test-sources</phase>
            <phase>process-test-sources</phase>
            <phase>generate-test-resources</phase>
            <phase>process-test-resources</phase>
            <phase>test-compile</phase>
            <phase>process-test-classes</phase>
            <phase>test</phase>
            <phase>prepare-package</phase>
            <phase>package</phase>
            <phase>pre-integration-test</phase>
            <phase>integration-test</phase>
            <phase>post-integration-test</phase>
            <phase>verify</phase>
            <phase>install</phase>
            <phase>deploy</phase>
        </phases>
 
    </configuration>
</component>

在Maven的构建生命周期中,一共包含了以下阶段(phase):

  1. validate:验证项目是否正确且所有必要的信息都可用。
  2. initialize:初始化构建,设置必要的属性。
  3. generate-sources:生成任何需要的源代码。
  4. process-sources:处理源代码,例如过滤资源。
  5. generate-resources:生成除了Java源代码之外的资源文件。
  6. process-resources:复制并处理资源到目标目录(一般是target目录下)。
  7. compile:编译项目的源代码。
  8. process-classes:处理编译生成的字节码文件,例如对类进行字节码增强。
  9. generate-test-sources:生成测试源代码。
  10. process-test-sources:处理测试源代码。
  11. generate-test-resources:生成测试资源。
  12. process-test-resources:复制并处理测试资源到测试目标目录。
  13. test-compile:编译测试源代码到测试目标目录。
  14. process-test-classes:处理编译后的测试类文件。
  15. test:使用合适的单元测试框架运行测试。
  16. prepare-package:在实际打包之前做准备工作。
  17. package:把编译好的代码打包成可发布的格式,如JAR、WAR或EAR文件。
  18. pre-integration-test:在集成测试之前执行的动作。
  19. integration-test:处理任何集成测试。
  20. post-integration-test:在集成测试之后执行的动作。
  21. verify:运行任何检查以验证包是否有效且满足质量标准。
  22. install:将包安装到本地仓库,可供本地其他Maven项目作为依赖使用。
  23. deploy:将最终的包发布到远程仓库,供其他开发人员和项目作为依赖使用。

这些阶段构成了Maven构建的生命周期,插件的目标(goals)可以绑定到这些阶段中执行。执行(execution)就是在pom.xml中定义的插件目标与生命周期阶段的绑定关系。

maven-dependency-plugin

maven-dependency-plugin是Maven中一个非常强大的插件,用于处理项目依赖相关的任务。以下是关于此插件的一些关键知识和配置示例:

常用Goals(目标)

  • dependency:copy

    • 用途:将指定的依赖项复制到指定的位置,支持重命名或移除版本号。
    • 配置示例:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.3.0</version> <!-- 使用最新版本 -->
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>//作用到maven的哪个周期
            <goals>
                <goal>copy</goal>//动作目标
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                        <version>32.1.3-jre</version>
                        <type>jar</type>
                        <overWrite>false</overWrite>
                        //输出目录
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        //修改名称
                        <destFileName>optional-guava.jar</destFileName>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>
  • dependency:copy-dependencies

    • 用途:将项目的所有依赖复制到指定目录。
    • 配置示例:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.3.0</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <includeScope>runtime</includeScope>
            </configuration>
        </execution>
    </executions>
</plugin>

  • dependency:unpack

    • 用途:解压缩依赖的jar文件到指定目录。
    • 配置示例:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.3.0</version>
    <executions>
        <execution>
            <id>unpack</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>unpack</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>com.example</groupId>
                        <artifactId>example-artifact</artifactId>
                        <version>1.0.0</version>
                        <type>jar</type>
                        <overWrite>true</overWrite>//是否允许被覆盖
                        <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                        <includes>**/*.class</includes>
                        <excludes>META-INF/**</excludes>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

  • dependency:get

    • 用途:从远程仓库下载依赖项到本地。
  • dependency:resolve

    • 用途:解析项目依赖,不下载缺失的依赖,仅验证已存在的依赖。

配置属性

  • outputDirectory:指定输出目录。
  • overWrite:是否覆盖已存在的文件。
  • includeScope:指定要包含的依赖范围,如compile, runtime, test等。
  • artifactItems:用于指定需要操作的具体依赖项列表。

注意事项

  • 确保使用的是插件的最新或兼容版本,以获得最佳功能和支持。
  • 在执行特定操作时,需明确操作的生命周期阶段(),以确定何时执行该操作。
  • 根据实际需求调整配置,比如使用相对路径${project.build.directory}以保持构建的可移植性。

maven-resources-plugin

Maven Resources Plugin 是 Maven 中用于处理项目资源文件的一个重要插件。它负责将项目的资源文件(如配置文件、静态资源等)从源目录复制到输出目录,并支持资源过滤等功能。以下是该插件的一些关键知识点和可配置参数:

基本用途

  • 复制资源文件:从src/main/resources和src/test/resources目录复制文件到编译后的类路径和测试类路径。
  • 资源过滤:替换资源文件中的Maven属性和表达式(如${project.version})。
  • 文件排除与包含:指定哪些文件应该被包含或排除在处理之外。
  • 文件过滤器:基于文件类型或内容模式进行过滤处理。
  • 国际化支持:处理多语言资源文件,支持创建语言特定的资源包。

配置示例(放置于pom.xml的部分):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.0</version> <!-- 使用最新的版本 -->
    <configuration>
        <!-- 主要配置 -->
        <encoding>UTF-8</encoding> <!-- 设置资源文件编码 -->
        
        <!-- 资源过滤控制 -->
        <useDefaultDelimiters>true</useDefaultDelimiters> <!-- 是否使用默认的表达式分隔符 -->
        <delimiters> <!-- 自定义表达式分隔符 -->
            <delimiter>${*}</delimiter>
        </delimiters>
        <filtering>true</filtering> <!-- 是否开启资源过滤 -->
        
        <!-- 包含与排除规则 -->
        <includes> <!-- 包含的文件模式 -->
            <include>**/*.properties</include>
        </includes>
        <excludes> <!-- 排除的文件模式 -->
            <exclude>**/*-dev.properties</exclude>
        </excludes>
        
        <!-- 特定资源的处理 -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering> <!-- 对该目录下的资源启用过滤 -->
            </resource>
            <resource>
                <directory>src/extra-resources</directory> <!-- 添加额外的资源目录 -->
                <targetPath>META-INF</targetPath> <!-- 指定目标路径 -->
                <filtering>false</filtering> <!-- 可以针对每个资源集单独设置过滤开关 -->
            </resource>
        </resources>
        
        <!-- 文件类型过滤 -->
        <fileSets> <!-- 对特定文件类型应用过滤规则 -->
            <fileSet>
                <directory>src/main/config</directory>
                <includes>
                    <include>*.xml</include>
                </includes>
                <filtered>true</filtered>
            </fileSet>
        </fileSets>
        
        <!-- 国际化资源处理 -->
        <nonFilteredFileExtensions> <!-- 定义不应被过滤的文件扩展名 -->
            <nonFilteredFileExtension>jpg</nonFilteredFileExtension>
            <nonFilteredFileExtension>png</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

注意事项

  • version标签中的版本号应根据实际可用的最新版本进行调整。
  • filtering配置可以是全局的,也可以在每个标签内单独设置,以提供更细粒度的控制。
  • 使用可以防止某些二进制文件或不需要过滤的文本文件被错误处理。

以上就是Maven Resources Plugin的一些核心配置和知识点。根据项目具体需求,可以选择性地配置这些参数来优化资源处理流程。

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-resources-plugin</artifactId>
   <executions>
      <execution>
         <id>copy-resource</id>
         <phase>prepare-package</phase>
         <goals>
            <goal>resources</goal>
         </goals>
      </execution>
      <execution>
         <id>copy-jars</id>
         <phase>install</phase>
         <goals>
            <goal>resources</goal>
         </goals>
         <!--0将打包好的jar复制到image中 -->
         <configuration>
            <resources>
               <resource>
                  <directory>${project.build.directory}</directory>
                  <filtering>false</filtering>
                  <includes>
                     <include>${project.build.finalName}.jar</include>
                  </includes>
                  <targetPath>${project.build.directory}/${project.build.finalName}-docker-image</targetPath>
               </resource>
            </resources>
         </configuration>
      </execution>
   </executions>
   <configuration>
      <encoding>UTF-8</encoding>
      <resources>
         <!-- 以下镜像包处理开始 -->
         <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
               <include>constant.properties</include>
            </includes>
            <targetPath>${project.build.directory}/classes</targetPath>
         </resource>
       </resources>
</configuration>

maven-assembly-plugin

Maven Assembly Plugin 是一个强大的Maven插件,用于创建项目的分发包,它可以将项目的编译输出、依赖、资源以及其他文件组织成一个可分发的归档文件,如ZIP、TAR、JAR、WAR等。以下是关于 Maven Assembly Plugin 的一些核心知识点和配置项:

知识点概览

目的

简化项目的部署和分发过程,使得项目更易于管理。特别适用于需要将应用程序及其依赖、配置文件、脚本等整合为单一可部署单元的场景。

  1. 装配描述符

核心功能之一是使用Assembly描述符文件(默认为assembly.xml),该文件详细定义了如何组装最终的归档文件,包括文件结构、过滤、依赖关系处理等。

  1. 预定义描述符

提供了一些预定义的描述符引用(如jar-with-dependencies),可以直接在POM中使用,无需自定义描述符文件。

  1. 多格式支持

能够生成多种类型的归档文件,不仅限于Java应用,也适合于任何需要打包的项目。

配置示例

在pom.xml中配置Maven Assembly Plugin的基本形式如下:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version> <!-- 使用最新的稳定版本 -->
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase> <!-- 绑定到package阶段 -->
                    <goals>
                        <goal>single</goal> <!-- 执行single goal来创建归档 -->
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.example.MainClass</mainClass> <!-- 可选,如果需要生成可执行jar -->
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef> <!-- 使用预定义描述符 -->
                        </descriptorRefs>
                        <!-- 或者使用自定义描述符文件 -->
                        <!--<descriptors>
                            <descriptor>src/main/assembly/custom-assembly.xml</descriptor>
                        </descriptors>-->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

关键配置项

  • 定义归档文件的元数据,如Manifest条目,用于生成可执行JAR。
  • 指定使用的预定义装配描述符引用。
  • 指定自定义的Assembly描述符文件路径,当需要更复杂的打包逻辑时使用。
  • 是否在最终归档文件名后追加Assembly ID,默认为true。
  • 指定最终归档文件的名称。
  • 是否在归档中包含基目录,默认为true。

docker-maven-plugin

Docker Maven Plugin 是一个用于与 Docker 进行交互的 Maven 插件,它允许你在 Maven 构建周期中自动化 Docker 镜像的构建、标记、推送等操作。以下是一些关键的配置项及其说明:

基础配置

在 pom.xml 文件中,首先需要声明 Docker Maven Plugin 插件及其版本,然后在 -> 节点内配置该插件的具体行为:

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId> <!-- 或其他合适的groupId,根据使用的插件版本 -->
            <artifactId>docker-maven-plugin</artifactId>
            <version>VERSION</version> <!-- 使用最新或合适的版本号 -->
            <configuration>
                <!-- 插件配置项 -->
            </configuration>
        </plugin>
    </plugins>
</build>

主要配置项

  1. 指定 Docker 镜像的名称(含仓库地址),例如:myregistry/myapp:latest。
  2. 指定 Dockerfile 的路径,如果不指定,默认使用项目根目录下的 Dockerfile。
  3. 配置 Docker 守护进程的地址,例如:unix:///var/run/docker.sock 或 tcp://localhost:2375。
  4. 传递给 Docker 构建过程的构建参数,格式为 v a l u e ,例如: {value},例如: value,例如:{project.build.finalName}.jar。
  5. 定义要拷贝到 Docker 镜像中的资源,可以用来指定额外的文件或目录。
  6. 是否使用 Docker 层缓存,默认为 true。
  7. 是否强制覆盖已存在的标签,默认为 false。
  8. 为镜像添加额外的标签,可以配置多个 。
  9. 构建完成后是否自动推送镜像到仓库,默认为 false。
  10. 指定 Docker 镜像仓库的URL,当需要推送镜像时使用。
  11. 认证配置,用于 Docker 仓库的认证,包含用户名和密码等信息。
  12. 覆盖 Dockerfile 中的入口点和命令。
  13. 定义 Docker 容器运行时挂载的卷
<plugin>
   <groupId>com.spotify</groupId>
   <artifactId>docker-maven-plugin</artifactId>
   <version>1.0.0</version>
   <executions>
      <execution>
         <id>build-push</id>
         <phase>install</phase>
         <goals>
            <goal>build</goal>
            <goal>push</goal>
         </goals>
      </execution>
   </executions>
   <configuration>
      <!--此处对应maven配置的serverId -->
      <serverId>harbor</serverId>
      <!-- 镜像名称 -->
      <imageName>${registry.address}/${registry.name}/${app.name}:${app.version}</imageName>
      <!--docker远程服务器地址 -->
      <dockerHost>http://${docker.host}:2375</dockerHost>
      <!-- Dockerfile文件存放目录 -->
      <dockerDirectory>${project.build.directory}/${project.build.finalName}-docker-image</dockerDirectory>
      <resources>
         <resource>
            <directory>${project.build.directory}/${project.build.finalName}-docker-image</directory>
            <include>${project.build.finalName}.jar</include>
         </resource>
      </resources>
   </configuration>
</plugin>

感谢技术人们来看,相逢即缘分~
翠花,辛苦捡桌子了!

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Maven插件是一种可插拔的工具,可以在Maven构建过程中执行特定的任务。其中,maven-dependency-pluginmaven-surefire-plugin是两个常用的插件maven-dependency-plugin插件可以用来管理项目依赖,可以帮助我们列出项目中的依赖关系,复制依赖文件到指定目录,解压依赖文件等。常用的配置包括: - list:列出项目依赖 - copy-dependencies:将所有依赖文件复制到指定目录 - unpack:解压指定的依赖文件 maven-surefire-plugin插件则是用来执行项目的单元测试的。它可以在Maven构建过程中自动执行单元测试,并生成测试报告。常用的配置包括: - includes/excludes:指定要执行的测试类或排除的测试类 - parallel:指定测试是否并行执行 - reportsDirectory:指定测试报告生成的目录 在POM文件中配置这两个插件,可以通过以下方式: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <includes> <include>**/*Test.java</include> </includes> <parallel>methods</parallel> <threadCount>10</threadCount> <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> </configuration> </plugin> </plugins> </build> ``` 以上是一个简单的POM文件中Maven插件配置maven-dependency-pluginmaven-surefire-plugin的示例,其中maven-dependency-plugin在package阶段执行复制依赖文件的任务,maven-surefire-plugin在test阶段执行单元测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值