《Maven项目构建和关系》


前言

Maven是一个项目管理和构建工具,它使用基于项目对象模型(POM)的概念来管理项目的构建、依赖、部署和文档等方面。Maven通过一系列的命令来执行不同的操作。


一、项目构建

1.项目构建是什么?

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

2.主动触发场景

重新编译 : 编译不充分, 部分文件没有被编译!

打包 : 独立部署到外部服务器软件,打包部署

部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用

二、执行Maven的构建命令

1. mvn 构建命令

Maven命令

  1. 清理命令: mvn clean 删除taget文件夹
  2. 编译命令: mvn compile 将java源文件编译成class文件
  3. 测试命令: mvn test 测试项目,执行test目录的测试用例
    注意测试用例的类名必须以Test开头,只执行以Test开头的测试类
  4. 打包命令: mvn package 将项目打成jar/war包
  5. 安装命令: mvn install 将当前项目放入到maven的本地仓库,供其它项目使用。

要求:执行maven中运行构建相关的命令时,必须进入到项目的pom.xml所在的目录。否则会报错。

2. 可视化方式构建

通过maven—>项目—>Lifecycle生命周期点开—>提供了一套操作

  1. Validate: 验证工程正确性
  2. Verify :核实。主要是对package检查是否有效
  3. Site: 生成项目的站点文档
  4. Deploy:配置部署,复制到远程仓库

在这里插入图片描述

三、 <scope></scope>依赖范围,决定哪些构件被包含进来。

作用域值编译测试打包示例
test××Junit 测试时使用
provided×Servlet、lombok
compile默认
runtime×反射,数据库驱动,执行时使用
Systemprovided,不会依赖仓库中的jar包,而是引用本地jar包 <systemPath></systemPath>
  1. 依赖范围建议,哪怕所有的范围都设置compile,也不会影响正常使用。
  2. 使用依赖的,提供scope,直接从中央仓库复制就行了,并且自动补全。
  3. 90%以上都会使用compile。

四、Package 项目类型,最终被打成什么项目类型

默认:jar
jar 指的是普通的java项目打包方式! 项目打成jar包!
war 指的是web项目打包方式!项目打成war包!
pom不会将项目打包!这个项目作为父工程,被其他工程聚合或者继承!
如果一个项目有子项目就必须是pom类型
<packaging>jar/pom/war</packaging>
注意:jdk17 和 war包版本插件不匹配,打成war包,需要引入打包插件

<build>
   <!-- jdk17 和 war包版本插件不匹配 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>

五、依赖关系

如果一个项目需要依赖于另外一个项目或jar包
通过pom.xml 中标签引入依赖项目或jar包的坐标

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
 
<dependency>
    <groupId>com.xxx</groupId>
    <artifactId>xxx-goods</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

1.依赖传递

如果通过pom.xml 中标签引入jar包的坐标,他会在自动下载该jar包所依赖的所有项目jar包。

2.依赖排除

阻止某一些jar包的传递,因为这样的jar包传递进来会和其他的jar包冲突

<dependency>
    <groupId>com.xxx</groupId>
    <artifactId>xxx-goods</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--手动排除-->
    <exclusions>
        <exclusion>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3.依赖冲突

短路优先,只会引入路径最短的jar包相同长度路径下,声明优先,谁先声明。

!--jackson-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.0</version>
</dependency>

六、聚合关系

聚合关系是一种强关联关系,表示整体与部分之间的关系。在聚合关系中,部分对象可以被多个整体对象共享,即整体对象可以包含多个部分对象。聚合关系表明了对象之间的包含关系,但是部分对象可以独立存在,即当整体对象被销毁时,部分对象仍然可以存在。聚合关系可以用来描述具有包含关系的类之间的关系,例如一个班级包含多个学生,一个公司包含多个员工等。

1. 聚合概念

Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程!

2. 聚合作用

  1. 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
  2. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。

3. 实现步骤

  1. 创建maven父项目,new–>project–>new Project–>maven项目–>taobao-parent
    1. 删掉src,因为聚合项目通常只是管理子工程
    2. packaging修改下,默认jar,改成pom,代表是一个逻辑父项目
  2. 创建子模块
    父项目—>右键–> new–>子模块 module–> parent选None没有
    在这里插入图片描述
    3.打开父项目的pom.xml把子项目管理起来
 <modules>
      <module>tb-goods</module>
      <module>tb-orders</module>
      <module>tb-user</module>
   </modules>

4.总结

  1. 父项目类型必须为pom,父项目会将子项目包含进来。
  2. 子项目类型不是maven project,而是maven moduel
  3. 父项目pom.xml通过标签指定子项目信息
<modules>
  	<module>taobao-orders</module>
  </modules>
  1. 父项目可以统一管理所有的子项目
    1. 点击父项目的构建命令可以直接对所有的子项目进行编译,打包,安装等。
    2. 当orders引入goods的模块时,goods模块发生改变,不需要重新安装就可以自动更新。

七、继承关系

1. 继承概念

Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。
在这里插入图片描述

2. 继承作用

作用:在父工程中统一管理项目中的依赖信息,进行统一版本管理!
它的背景是:

  1. 对一个比较大型的项目进行了模块拆分。
  2. 一个 project 下面,创建了很多个 module。
  3. 每一个 module 都需要配置自己的依赖信息。
    它背后的需求是:
    1. 多个模块要使用同一个框架,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一管理。
    2. 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。

通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

3.实现步骤

  1. 创建maven父项目,new–>project–>maven项目–>taobao-parent
    1. 把src删掉,因为聚合项目通常只是管理子工程
    2. 把packaging修改下,默认jar,改成pom,当前不是一个具体的包
    3. 把子项目管理起来
  2. 创建子模块
    1. 父项目—>右键–> new–>子模块 module–> parent选taobao-parent
      在这里插入图片描述

4.总结

总结:

  1. 父项目类型必须为pom
  2. 子项目类型可以为jar或war.如果当前子项目是其它项目的父项目,那么也必须为pom.
  3. 继承关系只是逻辑意义上的继承,父项目没有包含子项目信息
  4. 子项目的pom.xml中通过标签指定父项目信息
<parent>
    <groupId>com.xxx</groupId>
    <artifactId>taobao-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  1. 如果子项目的和和父项目相同,可以省略。
  2. 父项目中配置的jar包坐标依赖将会被所有子项目自动继承,
  3. 父项目中配置的jar包坐标依赖不会被子项目继承,但是可以统一版本控制。

八、<dependencyManagement>标签

父工程依赖统一管理:如果子项目不继承,需要统一版本,使用dependencyManagement

1. 父项目的pom.xml声明版本

<properties>
 <mysql-version>8.0.25</mysql-version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-version}</version>
        </dependency>
</dependencyManagement>

2. 子项目的pom.xml引用父项目版本

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

九、Maven 核心知识点总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值