Maven基础

Maven基础

1 Maven的作用

随着项目越来越大,要实现的功能越来越复杂我们需要导入的jar包越来越多,所以我们使用Maven来帮助我们来构建jar包和管理依赖。

image-20230228194210953

1.1 Maven的构建

构建指的是使用原材料生产产品的过程,构建过程包含的主要环节有:

  • 清理:删除上一次构建的结果,为下一次构建做好准备
  • 编译 :Java源程序编译成*.class字节码文件
  • 测试:运行提前准备好的测试程序
  • 报告:针对刚才测试的结果生成一个全面的信息
  • 打包
    • Java工程:jar包
    • web工程:war包
  • 安装:把一个Maven工程经过打包操作生成的jar包或war包安装到Maven仓库
  • 部署:将准备好的jar包或war包部署到服务器上运行

1.2 Maven的依赖管理

如果A工程里面用到了B工程的类、接口、配置文件等等这样的资源,那么我们就可以说A依赖B。

依赖管理中要解决的具体问题:

  • jar包的下载:使用Maven之后,jar包会从规范的远程仓库下载到本地
  • jar包之间的依赖:通过依赖的传递性自动完成
  • jar包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

1.3 Maven的工作机制

image-20230228195850385

2 Maven核心概念

2.1 pom文件

<?xml version="1.0" encoding="UTF-8"?>
<!--project 标签:根标签,表示对当前工程进行配置、管理-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--    modelVersion 标签:从Maven2开始就固定是4.0.0-->
<!--    代表当前 pom.xml 所采用的标签结构-->
    <modelVersion>4.0.0</modelVersion>
<!--坐标信息-->
    <groupId>org.example</groupId>
    <artifactId>mavenLearn</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--packaging 标签:打包方式-->
<!--取值jar:生成jar包,说明这是一个Java工程-->
<!--取值war:生成war包,说明这是一个web工程-->
<!--取值pom:说明这个工程是用来管理其它工程的工程-->
    <packaging>jar</packaging>
<!--properties 标签:在Maven中定义属性值-->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        
<!--    可以自定义标签-->
        <spring-version>4.0.0</spring-version>
    </properties>
<!--dependencies 标签:配置具体的依赖信息-->
    <dependencies>

    </dependencies>
</project>

使用Maven其实就是配置pom文件

2.2 Maven中的坐标

Maven使用三个向量在Maven仓库中唯一定位到一个jar包。

  • groupId:公司或者组织的id
    • 例如:com.oizys.maven
  • artifactId:一个项目或者项目中一个模块的id
  • version:版本号
    • 例如:SNAPSHOT表示快照版本,正在迭代过程中,不稳定的版本
    • 例如:RELEASE表示正式版本
<!-- https://mvnrepository.com/artifact/com.github.tomakehurst/wiremock -->
<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <version>2.27.2</version>
    <type>pom</type>
    <scope>test</scope>
</dependency> 

2.3 Maven的命令

划分:

image-20230228201241557

1、maven clean:对项目进行清理,删除target目录下编译的内容

2、maven compile:编译项目源代码

3、maven test:对项目进行运行测试

4、maven packet:打包文件并存放到项目的target目录下,打包好的文件通常都是编译后的class文件

5、maven install:在本地仓库生成仓库的安装包,可供其他项目引用,同时打包后的文件放到项目的target目录下

2.4 构建生命周期

为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作

生命周期名称作用各个环节
Clean清理操作相关pre-clean
clean
post-clean
Site生成站点相关pre-site
site
post-site
deploy-site
Default主要构建过程validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目 main 目录下的源代码。
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将最终的包复制到远程的仓库,以让其它开发人员共享;或者部署到服务器上运行(需借助插件,例如:cargo)。

3 Maven的依赖

3.1 依赖的范围

标签位置:dependencies/dependency/scope

可选的值:compile/test/provided/system/runtime/import

main目录(空间)test目录(空间)开发过程(时间)部署到服务器(时间)
compile有效有效有效有效
test×有效有效×
provided有效有效有效×
  • compile:通常使用的第三方框架的jar包这样在项目实际运行时真正要用到的jar包都是以 compile 范围进行依赖的。比如SSM框架所需jar包
  • test:测试过程中使用的 jar 包,以 test 范围依赖进来。比如junit
  • provided:在开发过程中需要用到的"服务器上的jar包"通常以provided范围依赖进来。比如servlet-api、jsp-api。而这个范围的 jar 包之所以不参与部署、不放进 war 包,就是避免和服务器上已有的同类 jar 包产生冲突,同时减轻服务器的负担。说白了就是:服务器上已经有了,你就别带啦!"

3.2 依赖的传递

在 A 依赖 B ,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。

  • B 依赖 C 时使用 compile 范围:可以传递
  • B 依赖 C 时使用 test 或 provided 范围:不能传递,所以需要这样的 jar 包时,就必须在需要的地方明确配置依赖才可以。

3.3 依赖的排除

依赖的排除即阻断依赖的传递性。当 A 依赖 B,B 依赖 C 而且 C 可以传递到 A 的时候,A 不想要C,需要在 A 里面把 C 排除掉。而往往这种情况都是为了避免jar包之间的冲突。

image-20230228212346346

配置方法

<dependency>
	...
    <exclusions>
    	<exclusion>
        	<!--指定需要排除的 jar 包的坐标-->
        </exclusion>
    </exclusions>
</dependency>

3.4 工程的继承

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

具体操作
  1. 创建父工程然后修改打包方式为 pom

    <groupId>org.example</groupId>
    <artifactId>maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    
  2. 在父工程中创建子工程并在pom.xml中添加

    <modules>
    	<module>pro01-maven-module</module>
        <module>pro02-maven-module</module>
        <module>pro03-maven-module</module>
    </modules>
    
  3. 在父工程中统一管理依赖版本

    <dependencyManagement>
        <dependencies>
        	<dependency>
    			...
                <version> ... </version>
        	</dependency>
            ...
        </dependencies>
    </dependencyManagement>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值