【Maven】Maven构建管理和插件配置

在没有Maven命令之前,我们都是使用IDEA进行构建,当我们写好了对应的Java工程,我们只需要点击运行即可,整个构建过程基本上我们是没有任何参与的。

有了Maven后,Maven将整个构建过程中的这些动作对外进行暴露了,我们可以使用多种方式进行参与。

一、构建概念

项目构建是指将Java源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。


二、主动触发场景

  • 重新编译:编译不充分,部分文件没有被编译!
  • 打包:独立部署到外部服务器软件,打包部署
  • 部署本地或者私服仓库:maven工程加入到本地或者私服仓库,供其他工程使用

注意和之前的部署概念区分,之前理解的部署是把web项目放到服务器软件的过程,而这个部署指的是将maven工程加入到本地或者私服仓库,供其他工程使用。


三、命令方式构建

语法:mvn 构建命令 构建命令....

target是存储构建后的产物的,就像非Maven工程中有out文件夹是一样的。

命令描述
mvn clean清理编译或打包后的项目结构,删除target文件夹
mvn compile编译项目,生成target文件
mvn test执行测试源码 (测试)
mvn site生成一个项目依赖信息的展示页面(不怎么用,因为我们依赖信息通过pom文件也是可以看见的)
mvn package打包项目,生成war / jar 文件
mvn install打包后上传到maven本地仓库(本地部署),那么当前电脑上其他的Maven工程就可以引用它
mvn deploy只打包,上传到maven私服仓库(私服部署)

对应关系如下图

image-20240731080717608

注意事项:

  1. 命令执行需要我们进入到项目的根路径,与pom.xml平级,因为它需要读取你的pom.xml,最终才能进行构建。

  2. 部署必须是jar包形式,也就是说你只能是一个Java普通工程才能被别人引用;而web工程应该放到服务器软件,而不是放到仓库的。

  3. 多个命令可以一起使用,例如重新编译可以写成 mvn clean compile

  4. package打包命令会自动识别你pom文件中的 packaging属性,如果没写packaging属性,那么默认就是jar包

    执行 mvn package 后,target目录下就会出现该项目的jar包

    image-20240731081711092
  5. mvn install:将target下的 project-1.0.0.jar 放到 D:\develop\mvn-repo 本地仓库中,存放的形式也是像我们之前一样,安装gav一层一层的最终放到这个对应的位置。

    image-20240731081958370

  6. PS:我们执行的 mvn 都是命令,真正干活的其实都是插件


四、可视化方式构建

IDEA提供的可视化工具


五、构建命令周期

1)引入

如下图,清理指的是一个周期,使用的是 clean命令,对应的是一个清理插件,最终就完成了清理的动作。

因此真正干活的其实是插件,而我们是用命令去触发这个插件的。

image-20240731083115127

编译也是一样,mvn compile 触发了 resources插件compile插件,最终完成了整个编译的过程。

image-20240731083342407

接下来我们再执行一下 mvn test,可以发现它触发了跟 compile 一样的插件

image-20240731083736245

我们再来试一个打包

image-20240731083652670

此时就发现了,后面执行的这些动作,都触发了前面的操作。

最后我们再来测试部署

image-20240731084058847

由此可见,如果我们要编译部署的话,无需先compile,然后再package,最后install。

因此如果你想要部署,不需要先执行编译、测试、打包,而是直接install即可。


2)构建生命周期

Maven的生命周期就是为了对所有的构建过程进行抽象和统一。 描述了一次项目构建,经历哪些阶段。

在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试及部署。虽然大家都在不停地做构建工作,但公司和公司间、项目和项目间,往往使用不同的方式做类似的工作。

Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完美的,易扩展的项目构建生命周期。这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。

Maven构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!也是一种简化构建的思路!

Maven对项目构建的生命周期划分为3套(相互独立):

  • 清理周期:主要是对项目编译生成文件进行清理,比如编译之后的class文件、字节码文件等

  • 默认周期(构建周期):定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,如:编译、测试、打包、安装、部署等。

  • 报告周期:生成报告、发布站点等。

三套生命周期又包含哪些具体的阶段呢, 我们来看下面这幅图:

每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。

image-20220616124348972

我们看到这三套生命周期,里面有很多很多的阶段,这么多生命周期阶段,其实我们常用的并不多,主要关注以下几个:

  • clean:移除上一次构建生成的文件
  • compile:编译项目源代码
  • test:使用合适的单元测试框架运行测试(junit)
  • package:将编译后的文件打包,如:jar、war等
  • install:安装项目到本地仓库

在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。

思考:当运行package生命周期时,clean、compile生命周期会不会运行?

clean不会运行,compile会运行。 因为compile与package属于同一套生命周期,而clean与package不属于同一套生命周期。

默认周期package并不会进行clean,因此打包的最佳触发方式应该为: mvn clean package;编译的最佳触发方式: mvn clean compile;构造本地仓库的最佳触发方式:mvn clean install


3)总结最佳使用方案

打包: mvn clean package
重新编译: mvn clean compile
本地部署: mvn clean install 

4)周期,命令和插件之间的关系

周期→包含若干命令→包含若干插件!

使用周期命令构建,简化构建过程!

最终进行构建的是插件!由于一个个的触发插件太麻烦了,因此触发都是通过周期触发。

Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。

image-20221130142100703


5)插件配置

每个Maven工程只要你创建了,都会包含Maven插件,而且这些版本都是会根据你Maven软件的不同,都有对应的版本。

image-20240731085212792

但如果我想自己配插件怎么办?

场景:我们这个版本的Maven自动打包war包的这个插件是2.2,版本泰迪,无法兼容JDK17的打包方式

image-20240731085529302

此时执行 package 就会报错

image-20240731085618130

此时我们就需要配一个高版本的插件出来。

<!-- 导入插件,插件都是来辅助我们程序进行构建的,因此是放在build里面 -->
<build>
   <!-- jdk17 和 war包版本插件不匹配 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>

配置完成后,就使用了你的插件替代了Maven自带的插件。


6)IDEA每个周期所使用的插件

选择对应的生命周期,双击执行

image-20221201161957301

compile:

会将编译好的存放在target下,classes里面存放的就是编译之后的字节码文件

image-20221201163711835

test:

image-20221201164627403

package:

打包后的文件会存放在target这个目录下

image-20221201165801341

install:

将当前的项目部署在本地仓库

image-20221201170830837

跳过测试阶段:

image-20231025212243716

clean:

image-20221201171529382


六、更新依赖索引

有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下:

打开设置----搜索maven----Repositories----选中本地仓库-----点击Update

1537786634456

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值