一、第一个 Maven
1、Maven 工程目录结构
在 main 和 test 各自的 java 文件夹下分别编写 java 文件
package com.qiuxuan;
public class Demo{
public String say(String name){
System.out.println("hello " + name);
return "hello " + name;
}
}
package com.qiuxuan;
import org.junit.Test;
import org.junit.Assert;
public class DemoTest{
@Test
public void testSay(){
Demo d = new Demo();
String res = d.say("maven");
Assert.assertEquals("hello maven",res);
}
}
在 src 同层目录下创建 pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qiuxuan</groupId>
<artifactId>project-java</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
2、Maven 项目构建命令
Maven 构建命令使用 mvn 开头,后面添加参数,可以一次性执行对个命令,使用空格分隔
-
mvn compile
-
编译
-
-
mvn clean
-
清理
-
-
mvn test
-
测试
-
-
mvn package
-
打包
-
-
mvn install
-
安装到本地仓库
-
3、插件创建工程
创建工程
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
创建 java 工程
mvn archetype:generate -DgroupId=com.qiuxuan -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
创建 web 工程
mvn archetype:generate -DgroupId=com.qiuxuan -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
二、IDEA 构建 Maven
- 新建空 Project【IDEA 2022.1.2】
- 配置 IDEA 的 Maven 环境
- 新建模块
- 目录结构
- Tomcat 运行插件
配置端口及路径
三、依赖管理
1、依赖配置
依赖指当前运行所需的 jar,一个项目可以设置多个依赖
<!--设置当前项目所依赖的所有jar-->
<dependencies>
<!--设置具体的依赖-->
<dependency>
<!--依赖所属群组id-->
<groupId>junit</groupId>
<!--依赖所属项目id-->
<artifactId>junit</artifactId>
<!--依赖版本号-->
<version>4.12</version>
<!--依赖范围-->
<scope>test</scope>
</dependency>
</dependencies>
2、依赖传递
依赖具有传递性
-
直接依赖
-
在当前项目中通过依赖配置建立的依赖关系
-
-
间接依赖
-
被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
-
3、依赖冲突
-
路径优先
-
当依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高
-
-
声明优先
-
当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
-
-
特殊优先
-
当同级配置了相同资源的不同版本,后配置的覆盖先配置的
-
4、可选依赖
可选依赖指对外隐藏当前依赖的资源 -- 不透明
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<optional>true</optional>
</dependency>
5、排除依赖
排除依赖里包含的依赖 -- 不需要
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
6、依赖范围
依赖的 jar 默认情况可以再任何地方使用,可以通过 scope 标签设定其作用范围
作用范围
主程序范围有效(main文件夹范围内)
测试程序范围有效(test 文件夹范围内)
是否参与打包(package 指令范围内)
7、依赖范围的传递性
带有依赖范围的资源在进行传递时,作用范围将受到影响
四、生命周期与插件
1、项目构建生命周期
Maven 构建生命周期描述的是一次构建过程经历了多少个事件
Maven 对项目构建的生命周期划分为 3 个
clean
清理工作
default
核心工作,例如编译、测试、打包,部署等
site
产生报告,发布站点等
clean 生命周期
-
prre-clean
-
执行一些需要在 clean 之前完成的工作
-
-
clean
-
移除所有上次构建生成的文件
-
-
post-clean
-
执行一些需要在 clean 之后立刻执行完成的工作
-
default 生命周期
-
validate(校验)
-
检验项目是否正确并且所有必要的信息可以完成项目的构建过程
-
-
initialize(初始化)
-
初始化构建状态
-
-
generate-sources(生成源代码)
-
生成包含在编译阶段中的任何源代码
-
-
process-sources(处理源代码)
-
处理源代码
-
-
gentrate-resources(生成资源文件)
-
生成将会包含在项目包中的资源文件爱你
-
-
process-resources(处理资源文件)
-
复制和处理资源到目标目录,为打包阶段做好准备
-
-
compile
(编译)-
编译项目的源代码
-
-
process-classes(处理类文件)
-
处理编译生成的文件
-
-
generate-test-sources(生成测试源代码)
-
生成包含在编译阶段的任何测试源代码
-
-
process-test-sources(处理测试源代码)
-
处理测试源代码
-
-
generate-test-resources(生成测试资源文件)
-
为测试创建资源文件
-
-
process-test-resources(处理测试资源文件)
-
复制和处理测试资源带目标目录
-
-
test-compile(编译测试源码)
-
编译测试源代码到测试目标目录
-
-
process-test-classes(处理测试类文件)
-
处理测试源码编译生成的文件
-
-
test
(测试)-
使用合适的单元测试框架运行测试
-
-
preoare-package(准备打包)
-
在实际打包之前,执行任何必要的操作为打包做准备
-
-
package
(打包)-
将编译后的代码打包成可分发格式的文件
-
-
pre-intergration-test(集成测试前)
-
在执行集成测试前进行必要的动作
-
-
interagration-test(集成测试)
-
处理和部署项目到可以运行集成测试环境中
-
-
post-intergration-test(集成测试后)
-
在执行集成测试完成后进行必要的动作
-
-
verify(验证)
-
运行任意的检查来验证项目包有效且达到质量标准
-
-
install
(安装)-
安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖
-
-
deploy
(部署)-
将最终的项目包复制到远程仓库中与其他开发者和项目共享
-
site 生命周期
-
pre-site
-
执行一些需要在生成站点文档之前完成的工作
-
-
site
-
生成项目的站点文档
-
-
post-site
-
执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
-
-
site-deploy
-
将生成的站点围挡部署到特定的服务器上
-
2、插件
插件与生命周期内的阶段绑定,在执行到对象生命周期时执行对应的插件功能
默认 maven 在各个生命周期上绑定有预设的功能
通过插件可以自定义其他功能
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<exclusions>
<exclusion>
<goals>
<!--对源码打包-->
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</exclusion>
</exclusions>
</dependency>
一 叶 知 秋,奥 妙 玄 心