Maven 坐标
- Maven坐标主要组成
- groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
- artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
- version:定义当前项目版本号
Maven 指定本地仓库位置
Maven 软件和指定仓库位置的setting.xml都需要更改
<localRepository>D:\maven\repository</localRepository>
Maven 镜像
Maven 软件和指定仓库位置的setting.xml都需要更改
<mirror>
<id></id>
<mirrorOf>central</mirrorOf>
<name></name>
<url></url>
</mirror>
Maven 项目构建命令
# 编译
mvn compile
# 清理
mvn clean
# 测试
mvn test
# 打包
mvn package
# 安装到本地仓库
mvn install
Maven 插件创建工程
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-Dversion={project-version}
-DinteractiveMode=false
mvn archetype:generate "-DgroupId=com.companyname.bank" "-DartifactId=consumerBanking"
"-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"
Idea 创建空项目
再创建Modules 即可, 可创建多个maven工程
Maven中依赖传递
-
依赖具有传递性
- 直接依赖: 在当前项目中通过依赖配置建立的依赖关系
- 间接依赖: 被依赖的资源如果依赖其他资源, 当前项目间接依赖其他资源
-
依赖传递冲突问题
- 路径优先: 当依赖中出现相同的资源时, 层级越深, 优先级越低, 层级越浅, 优先级越高
- 声明优先: 当资源在相同层级被依赖时, 配置顺序先前的覆盖配置顺序我才看到的
- 特殊优先: 当同级配置了相同资源的不同版本, 后配置的覆盖先配置的.
Maven 依赖资源可见和排除
# 被依赖时, 其他人看到不到
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<option>true</option>
</dependency>
# 排除依赖的某个资源
<dependency>
<groupId>org.example</groupId>
<artifactId>web02</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
scope | 主代码 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compile(默认) | log4j | |||
test | junit | |||
provided | servlet-api | |||
runtime | jdbc |
compile | test | provided | runtime | |
---|---|---|---|---|
complile | compile | test | provided | runtime |
test | ||||
provided | ||||
runtime | runtime | test | provided | runtime |
Maven 构建生命周期
default构建生命周期 | |
---|---|
validate(校验) | 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。 |
initialize(初始化) | 初始化构建状态,比如设置属性值。 |
generate-sources(生成源代码) | 生成包含在编译阶段中的任何源代码。 |
process-sources(处理源代码) | 处理源代码,比如说,过滤任意值。 |
generate-resources(生成资源文件) | 生成将会包含在项目包中的资源文件。 |
process-resources (处理资源文件) | 复制和处理资源到目标目录,为打包阶段最好准备。 |
compile(编译) | 编译项目的源代码。 |
process-classes(处理类文件) | 处理编译生成的文件,比如说对Java class文件做字节码改善优化。 |
generate-test-sources(生成测试源代码) | 生成包含在编译阶段中的任何测试源代码。 |
process-test-sources(处理测试源代码) | 处理测试源代码,比如说,过滤任意值。 |
generate-test-resources(生成测试资源文件) | 为测试创建资源文件。 |
process-test-resources(处理测试资源文件) | 复制和处理测试资源到目标目录。 |
test-compile(编译测试源码) | 编译测试源代码到测试目标目录. |
process-test-classes(处理测试类文件) | 处理测试源码编译生成的文件。 |
test(测试) | 使用合适的单元测试框架运行测试(Juint是其中之一)。 |
prepare-package(准备打包) | 在实际打包之前,执行任何的必要的操作为打包做准备。 |
package(打包) | 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。 |
pre-integration-test(集成测试前) | 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。 |
integration-test(集成测试) | 处理和部署项目到可以运行集成测试环境中。 |
post-integration-test(集成测试后) | 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。 |
verify (验证) | 运行任意的检查来验证项目包有效且达到质量标准。 |
install(安装) | 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。 |
deploy(部署) | 将最终的项目包复制到远程仓库中与其他开发者和项目共享。 |
插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>