maven项目的构建,构建的主要环节,九大核心概念POM、坐标、生命周期等等

构建

构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页 面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。

构建的主要环节:

1、清理:删除以前的编译结果,为重新编译做好准备
2、编译:将java源程序编译成字节码文件
3、测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
4、报告:在每一次测试后以标准的格式记录和展示测试结果。
5、打包:将一个包含多文件的工程封装成一个压缩文件用于安装或者部署,java工程对应jar包,web工程对应war包。
6、安装:在maven环境下特指将打包的结果-----jar包和war包安装到本地仓库中。
7、部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。

maven的核心概念

maven能够实现自动化构建和它的内部原理是分不开的。
maven的九大核心概念:
1、POM
2、约定的目录结构
3、坐标
4、依赖管理
5、仓库管理
6、生命周期
7、插件和目标
8、继承
9、聚合

Maven 的核心程序中仅仅定义了抽象的生命周期,而具体的操作则是由 Maven 的插件来完成的。可是 Maven 的插件并不包含在 Maven 的核心程序中,在首次使用时需要联网下载。 下载得到的插件会被保存到本地仓库中。本地仓库默认的位置是:~.m2\repository。 我们也可以提前下载好所需要的内容,再将maven安装路径中conf文件夹下的settings里面的路径修改为repository所在的位置。
在这里插入图片描述

约定的目录结构

约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须 能找到 Java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。 我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:
①通过配置的形式明确告诉它 ②基于第三方工具或框架的约定 Maven 对工程目录结构的要求就属于后面的一种。
图在这里插入图片描述
上图取自尚硅谷。

POM

POM (Project Object Model):项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。 Maven 工程的核心配置。可以说学习 Maven 就是学习 pom.xml 文件中的配置

坐标

使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。 [1]groupid:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本

<groupId>com.blh.maven</groupId>  
<artifactId>Hello</artifactId>  
<version>0.0.1-SNAPSHOT</version> 

maven是通过gav(也就是上面的配置)来仓库中找jar包的(上面的jar包如下):
com.blh.maven+Hello+0.0.1-SNAPSHOT
注意:我们自己的maven工程必须执行安装操作才会进入仓库,安装命令:mvn install

依赖

Maven 中最关键的部分,我们使用 Maven 最主要的就是使用它的依赖管理功能。要理解和掌握 Maven 的依赖管理,我们只需要解决一下几个问题: ①依赖的目的是什么 当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目 中以依赖的方式引入一个我们需要的 jar 包呢?
答案非常简单,就是使用 dependency 标签指定被依赖 jar 包的坐标就可以了。

<dependency>
  <groupId>com.atguigu.maven</groupId>  
  <artifactId>Hello</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
  <scope>compile</scope> 
</dependency>

scope是指依赖的范围,我们有用到的三个值:compile、test、provided 。
从项目结构的角度去理解compile和test的区别:
在这里插入图片描述
结合具体例子:对于 HelloFriend 来说,Hello 就是服务于主程序的,junit 是服务于测试程序的。 HelloFriend 主程序需要 Hello 是非常明显的,测试程序由于要调用主程序所以也需要 Hello,所以 compile 范围依赖对主程序和测试程序都应该有效。 HelloFriend 的测试程序部分需要 junit 也是非常明显的,而主程序是不需要的,所以 test 范围依赖 仅仅对于主程序有效。
有效性总结:
【1】compile:
主程序:参与
测试程序:参与
参与部署:参与
参与打包:参与
【2】test:
主程序:不参与
测试程序:参与
参与部署:不参与
参与打包:不参与
【3】provide:
主程序:参与
测试程序:参与
参与部署:不参与
参与打包:不参与

依赖的传递性

A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不 可用。
在这里插入图片描述

依赖的排除

如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当 前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时 候将 B 排除。
在这里插入图片描述

统一管理所依赖 jar 包的版本

对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提 取出来。
统一声明版本号 :

<properties>    
  <blh.spring.version>4.1.1.RELEASE</blh.spring.version>
</properties> 

注意:其中 blh.spring.version 部分是自定义标签。

引用前面声明的版本号 :

<dependencies>
      <dependency>
                 <groupId>org.springframework</groupId>           
                 <artifactId>spring-core</artifactId>           
                 <version>${blh.spring.version}</version> 
     </dependency> …… 
</dependencies>
解决依赖冲突

[1]路径最短者优先
在这里插入图片描述
[2]路径相同时先声明者优先
在这里插入图片描述
这里“声明”的先后顺序指的是 dependency 标签配置的先后顺序。

仓库

分类:
[1]本地仓库:为当前本机电脑上的所有 Maven 工程服务。 [2]远程仓库 (1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
[2]中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
[3]中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
仓库中的文件
[1]Maven 的插件
[2]我们自己开发的项目的模块
[3]第三方框架或工具的 jar 包 ※不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。

继承

举例:
hello类依赖的Junit是4.0
helloFriends依赖的Junit是4.0
MakeFriends依赖的Junit是4.9

由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致

需求:
统一管理各个模块工程中对Junit依赖的版本
解决:
将Junit依赖统一提取到“父”工程中,在子工程中声明Junit依赖不指定版本,以父工程中统一设定为标准。同时也便于修改。
操作步骤:
1、创建一个Maven工程作为父工程,注意:打包的方式POM

  <groupId>com.blh.maven</groupId>
  <artifactId>Parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

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

 <!-- 子工程中声明父工程 -->
	  <parent>
	  	<groupId>com.blh.maven</groupId>
		<artifactId>Parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		
		<!-- 以当前文件为基准的父工程pom.xml文件的相对路径-->
		<relativePath>
			../Parent/pom.xml
		</relativePath>
	  </parent>

3、 将子工程中与父工程中重复的内容删除
4、 在父工程中统一Junit的依赖

 <!-- 配置依赖的管理 -->
  <dependencyManagement>
  	<dependencies>
  		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.0</version>
			<scope>test</scope>
		</dependency>
  	</dependencies>
  </dependencyManagement>

5、在子工程中删除Junit依赖的版本号部分
注意:配置继承后,执行安装命令时要先安装父工程

聚合

作用:一键安装各个模块工程
配置方式:在一个总的聚合工程中配置各个参与聚合的模块

 <!-- 配置聚合 -->
  <modules>
  <!-- 指定各个子工程的相对路径 -->
  	<module>../WebProject01</module>
  	<module>../Hello</module>
  	<module>../HelloFriend</module>
  </modules>

使用方式:在聚合工程里面的pom.xml右键run as ,maven install

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值