Maven学习02 - 生命周期、集成和聚合


)

Maven学习02 - 生命周期、集成和聚合

1.Maven生命周期

什么是生命周期

​ Maven 强⼤的原因是有⼀个⼗分完善的⽣命周期,⽣命周期可以理解为项⽬构建步骤的集合,它定义了各个构建环节的执⾏顺序,有了这个顺序,Maven 就可以⾃动化的执⾏构建命令。

​ Maven 的核⼼程序中定义了抽象的⽣命周期,⽣命周期中各个阶段的具体任务是由插件来完成的。有三套相互独⽴的⽣命周期,各个构建环节执⾏顺序不能打乱,必须按照既定的正确顺序来执⾏。

  • Clean Lifecycle : 在进⾏真正的构建之前进⾏⼀些清理⼯作
  • Default Lifecycle:构建的核⼼部分,编译、测试、打包、安装、部署等等。
  • Site Lifecycle:⽣成项⽬报告,站点,发布站点。

​ 这三个都是相互独⽴的。你可以仅仅调⽤ clean 来清理⼯作⽬录,仅仅调⽤ site 来⽣成站点。当然,也可以直接运⾏ mvn claen install site 运⾏所有这三套⽣命周期。

Clean Lifecycle

pre-clean 执⾏⼀些需要在clean之前完成的⼯作
clean 移除所有上⼀次构建⽣成的⽂件
post-clean 执⾏⼀些需要在clean之后⽴刻完成的⼯作

​ 我们前⾯讲的执⾏命令 mvn -clean,也就等同于 Clean ⽣命周期中的第⼀个阶段 mvn pre-clean clean。注意有 Clean 声明周期,⽽这个声明周期中⼜有 clean 阶段。

​ 只要执⾏后⾯的命令,那么前⾯的命令都会执⾏,不需要再重新去输⼊命令

Default Lifecycle

validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源⽂件,⾄⽬标⽬录,准备打包。
compile 编译项⽬的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源⽂件,⾄⽬标测试⽬录。
test-compile 编译测试源代码。
process-test-classes
test 使⽤合适的单元测试框架运⾏测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装⾄本地仓库,以让其它项⽬依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发⼈员与项⽬共享。

在maven中,只要在同⼀个⽣命周期,你执⾏后⾯的阶段,那么前⾯的阶段也会被执⾏,⽽且不需要额外去输⼊前⾯的阶段。

2.Maven继承和聚合

继承

有三个 Maven ⼯程,每个⼯程都依赖某个 jar 包,⽐如 Junit,由于 test 范围的依赖不能传递,它必然会分散在每个⼯程中,⽽且每个⼯程的jar 包版本可能不⼀致。那么如何管理各个⼯程中对于某个 jar 包的版本呢?

解决办法:

​ 将那个 jar 包版本统⼀提取到 ⼯程中,在⼦⼯程中声明依赖时不指定版本,以⽗⼯程中统⼀设定的为准,同时也便于修改。

操作步骤:

  1. 创建父工程

  2. 在子工程中声明对父工程的引用

      <!--⼦⼯程中声明对⽗⼯程的引⽤ -->
      <parent> 
        <groupId>com.seafyliang.maven</groupId> 
        <artifactId>Parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 以当前⼯程⽂件为基准的⽗⼯程 pom.xml⽂件的相对路径(可以不配置) -->
        <relativePath>../Parent/pom.xml</relativePath>
      </parent>
    
  3. 将⼦⼯程的坐标中与⽗⼯程坐标重复的内容删除(不删除也可以,为了简洁)

    在这里插入图片描述

    <dependencyManagement> 
    	<dependencies> 
    		<dependency> 
    			<groupId>junit</groupId> 
    			<artifactId>junit</artifactId> 
    			<version>4.8</version> 
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    </dependencyManagement>
    

    dependencyManagement标签管理的依赖,其实没有真正依赖,它只是管理依赖的版本。

  4. 在⼦⼯程中删除 Junit 的版本号

    在这里插入图片描述

  5. 更改版本号,(我们只需要更改⽗⼯程中的版本号即可)⽗⼯程通过 properties 统⼀管理版本号

在这里插入图片描述

我们可以通过 ⾃定义标签,然后在标签⾥⾯填写常量,这种⽅法不仅可以⽤来管理版本号,还可以⽤来管理⽐如设置某种编码等等。

聚合

需求场景:

在真实项⽬中,⼀个项⽬有表现层、业务层、持久层等。我们在⽤Maven 管理项⽬的时候,通常为创建多个 Maven ⼯程,也就是⼀个项⽬的多个模块。但是这样分成多个模块了,当我们进⾏项⽬打包发布的时候,那么要每⼀个模块都执⾏打包操作吗?这种重复的操作我们怎么才能避免呢?

解决办法:

创建⼀个聚合⼯程,将其他的各个模块都由这个聚合⼯程来管理,那么我们在进⾏项⽬发布的时候,只需要打包这个聚合⼯程就可以了。

操作步骤:

  1. 创建聚合⼯程(注意聚合⼯程的打包⽅式也必须为 pom,通常由 上⾯所讲的⽗⼯程来充当聚合⼯程)

    1. 创建的工程是 Maven Project,和创建子工程有区别
    2. 打包方式(Packaging)为pom
  2. 创建⼦⼯程:业务层

    1. 选择 Maven Module
    2. 填写⼦⼯程模块名(Module Name),打包⽅式选择 jar(⼦⼯程除了 web 层我们打包⽅式选择 war ,其余的都选择jar)
  3. 创建⼦⼯程:表现层和持久层

    1. 创建步骤和前⾯⼀样,注意表现层打包⽅式我们要选择 war,因为要发布到 tomcat 容器运⾏。
  4. 第四步:在聚合⼯程中添加⼦⼯程的引⽤

    <modules> 
      <module>Service</module>
      <module>Controller</module>
      <module>Mapper</module>
    </modules>
    

    注意:这⾥虽然各个模块有依赖关系,但是 可以不让依赖顺序添加,maven会⾃动识别依赖关系进⾏编译打包。

    这⾥总的聚合⼯程随便哪个⼯程都可以,但是通常⽤ Parent ⼯程来完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值