Loading... ## Maven概念 Maven是一个基于Java平台的**自动化构建工具**,将 `原材料`(java、js、css、html、图片)转换成 `产品`(可发布项目) 常见的自动化构建工具:make-ant-maven-gradle ### Maven作用 1. 增加第三方jar(中央仓库/镜像->本地仓库),并自动关联下载jar包间所依赖的jar包且不冲突。 2. 将项目拆分成若干模块 ### 主要功能 * **清理:**删除编译的结果,为重新编译做准备 * **编译:**java->class * **测试:**针对于项目中的**关键点**进行**单元测试**,亦可用项目中的**测试代码**去测试**开发代码**; * **报告:**将测试的结果进行显示 * **打包:**将项目中包含的多个文件压缩成一个文件,用于安装或部署。(java项目-jar、web项目-war) * **安装:**将打成的包放到**本地仓库**,供其他项目使用 * **部署:**将打成的包放到**服务器**上准备运行 --- ## 配置 1. 配置JAVA_HOME:`C:\java\jdk18` 2. 配置MAVEN_HOME:`F:\apache-maven-3.5.3` 3. 配置path:`%MAVEN_HOME%\bin` 4. maven目录下cmd验证:`mvn -v` 5. 配置本地仓库——maven目录/conf/settings.xml 最新配置可以参考:https://blog.csdn.net/a805814077/article/details/100545928<br>默认本地仓库:`C:/Users/CTX/.m2/repository`<br>修改本地仓库:`<localRepository>e:/report</localRepository>` 6. IDEA(/Eclipse)中——settings——Maven中指定文件信息  --- ## 常用命令(必须在pom.xml所在目录中执行命令) `mvn compile`:编译,只编译main目录中的java文件 `mvn test`:测试 `mvn package`:打成jar/war `mvn install`:将开发的模块放入本地仓库,供其他模块使用(放入的位置是通过gav决定) `mvn clean`:删除target目录(删除编译文件的目录) --- ## 依赖 ### 依赖有效性 Maven依赖分为三种类型:`compile(默认)`、`test`、`provided`,在<dependency>中的<scope>定义. Maven在编译、测试、运行项目时,各自使用一套classpath. 【强调】:在Eclipse中,pom.xml中增加完依赖后需要 `右击项目-maven-update project` ```XML <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> ```  ### 依赖排除 若A.jar依赖于B.jar,当我们通过maven引入A.jar时,会自动引入B.jar 【场景】:A.jar(x.java, y.java, z.java)、B.jar(a.java, b.java, c.java) 若A.jar和B.jar之间的依赖的本质是:x.java依赖于a.java,且我们已知A.jar的使用中不需要用到x.java,则可以把B.java的依赖排除 ```XML <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.7.RELEASE</version> <!-- 排除依赖 beans --> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> </exclusions> </dependency> ``` ### 依赖传递 A.jar->B.jar->C.jar 要使 A.jar->C.jar :当且仅当 B.jar 依赖于C.jar的范围是compile(项目模块一依赖于项目模块二,则一中会自动引入二中所需的各种jar包) ### 依赖原则 1. 路径最短优先原则 2. 路径长度相同: * 在同一个pom.xml文件中有2个相同的依赖(覆盖):后面声明的依赖会覆盖前面声明的依赖 (严禁使用本情况,严禁在同一个pom中声明2个版本不同的依赖) * 如果是不同的pom.xml中有2个相同的依赖(优先):则先声明的依赖 ,会覆盖后声明的依赖 统一JDK、依赖版本 ```XML <profiles> <!-- 统一JDK版本 --> <profile> <id>jdk-18</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> <!-- 统一依赖版本,${junit.version} --> <junit.version>4.0</junit.version> </profiles> ``` --- ## 继承 ### 父类 1. 父工程的打包方式为pom(jar/war/pom) 2. 在父工程的pom.xml中编写依赖 ```XML <dependencyManagement> <dependencies> <dependency> </dependency> </dependencies> </dependencyManagement> ``` ### 子类 在子类gav下加入父工程坐标和当前到父工程pom.xml的相对路径,并声明要使用到的依赖ga ```XML <parent> <!-- 1加入父工程坐标gav --> <groupId>cn.ctx.maven</groupId> <artifactId>A</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 2当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径 --> <relativePath>../A/pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> ``` --- ## 聚合(总工程打包方式为pom) Maven项目能够识别的:自身包含、本地仓库中的。 Maven1依赖于Maven2、Maven3、...,则在执行时:必须先将Maven2、Maven3、...加入到本地仓库(install),之后才能执行Maven1。以上前置工程的install操作,可以交由“聚合” 一次性搞定。 配置完聚合之后,以后只要操作总工程,则会自动操作该聚合中配置过的工程(可以不按顺序) ```XML <modules> <!--项目的根路径 --> <module>../Maven2</module> <module>../Maven3</module> </modules> ``` --- ## Maven生命周期 **生命周期和构建的关系:**假设生命周期中的顺序:a-b-c-d-e,当我们执行c命令,则实际执行的是 a-b-c ### 三阶段 1. **clean lifecycle**:清理 包括:`pre-clean`、`clean`、`post-clearn` 2. **default lifecycle**:默认(常用) 详见下图 3. **site lifecycle**:站点 包括:`pre-site`、`site`、`post-site`、`site-deploy`  Last modification:August 12, 2022 © Allow specification reprint Like 0 喵ฅฅ