Maven
简介
项目管理工具。 基于项目对象模型(POM), 可以通过一小段描述信息管理项目的构建。
下载与安装
下载地址'https://maven.apache.org/'
- 配置环境变量
新增'M2_HOME'
将%M2_HOME%\bin
添加到Path环境变量下
目录结构
src
main
java
- package
resources
test
java
- package
resources
一些喜欢忘记的知识点
- 指定JDK版本:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<encoding>UTF-8</encoding>
<java.version>12</java.version>
<maven.compiler.source>12</maven.compiler.source>
<maven.compiler.target>12</maven.compiler.target>
</properties>
常用命令
mvn clean # 清理target目录下的类文件
mvn install # 将本项目安装到本地仓库
mvn compile # 编译
mvn test # 执行测试
mvn package #打包
添加依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
自动生成目录结构
mvn archetype:generate
坐标与构件
仓库
本地仓库
- 修改本地仓库地址
远程仓库
镜像仓库
- 配置镜像仓库
生命周期
clean 清理项目
- pre-clean
- clean
- post-clean
default 构件项目
- compile
- test
- package
- install
- deploy
site 生成项目站点
pre-site
site
post-site
site-deploy 打包插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.0</version> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin>
POM元素
<?xml version="1.0" encoding="UTF-8"?>
<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>pom版本</modelVersion>
<groupId>反写的网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!-- 第一个 表示大版本号-->
<!-- 第二个 表示分支版本号-->
<!-- 第三个 表示小版本-->
<!-- snapshot 快照-->
<!-- alpha 内部测试-->
<!-- beta 公测-->
<!-- release 稳定-->
<!-- GA 正式分布-->
<version>1.0-SNAPSHOT</version>
<!-- war zip pom jar 默认是jar-->
<packaging></packaging>
<name>项目描述名</name>
<url>项目地址</url>
<description>项目描述</description>
<licenses>证书信息</licenses>
<organization>组织信息</organization>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<encoding>UTF-8</encoding>
<java.version>12</java.version>
<maven.compiler.source>12</maven.compiler.source>
<maven.compiler.target>12</maven.compiler.target>
</properties>
<!-- 依赖列表-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
<type></type>
<!--设置依赖是否可选 默认false-->
<optional></optional>
<!--排除依赖传递列表-->
<exclusions></exclusions>
</dependency>
</dependencies>
<!-- 依赖的管理-->
<dependencyManagement>
<dependencies>
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 父模块-->
<parent></parent>
<!-- 指定多个模块进行编译-->
<modules></modules>
</project>
依赖范围
依赖传递
A->B(compile) 第一关系: a依赖b compile B->C(compile) 第二关系: b依赖c compile
依赖冲突
短路优先
A->B->C->X(1.0) A->D->X(2.0) 由于只能引入一个版本的包,此时Maven按照最短路径选择导入x(2.0) A->B->X(1.0) A->D->X(2.0) 路径长度一致,则优先选择第一个,此时导入x(1.0)
<!--排除B对C的依赖-->
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>0.1</version>
<exclusions>
<exclusion>
<groupId>C</groupId>
<artifactId>C</artifactId><!--无需指定要排除项目的版本号-->
</exclusion>
</exclusions>
</dependency>
聚合与继承
聚合
<modules> <module>study-common</module> <module>study-plugin</module> <module>study-blog</module> <module>study-web</module> </modules>
继承
<parent> <groupId>com.tiantian.mavenTest</groupId> <artifactId>projectA</artifactId> <version>1.0-SNAPSHOT</version> </parent>