Maven笔记_0
Maven软件原理
pom.xml是Maven的核心配置文件,pom指Project Object Model, 项目对象模型, 将当前项目抽象为文档对象, 再操作整个项目Dependency, 依赖管理模型, 主要负责Maven的依赖管理功能- 在
pom.xml中配置了一个坐标,Dependency就会在本地仓库(local)中找到对应的jar包 - 如果
local没有, 就会通过其他方式(b2b,central中央仓库)下载
- 在
Maven本地仓库中一共存在三种jar包, 自己工程安装到本地仓库的jar包, 从网上下载的第三方jar包, 支持Maven工作的过程中需要用到的jar包
Maven结构
Maven安装需要有JAVA_HOME环境变量
bin: 包含有Maven的运行脚本, 比如mvn.cmdboot: 包含有plexus-classworlds类加载器框架conf: 包含核心配置文件, 主要是settings.xmllib: 包含运行时需要的Java类库
Maven配置
-
修改本地仓库位置
1
<localRepository>D:\MvnRepo</localRepository>
-
maven下载镜像1
2
3
4
5
6<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror> -
maven选用编译项目的jdk版本1
2
3
4
5
6
7
8
9
10
11
12<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile> -
IDEA配置本地Maven
Maven工程的GAVP
GroupId,ArtifactId,Version,Packaging, 最后一个是可选项, 如果是Java工程默认就是打jar包
GroupId:com.{公司/BU}.业务线.[子业务线], 最多四级,com.taobao.tddl,com.alibaba.sourcing.multilangArtifactId:产品线名-模块名, 语义不重复不遗漏,tc-client,uic-apiVersion:主版本号.次版本号.修订号, 不兼容api修改应该更新主版本号, 向下兼容功能新增修改次版本号, 修复bug修改修订号Packaging: 指示项目打包为什么类型文件,idea根据packing值, 识别maven项目类型jar表示普通Java工程war表示web工程pom表示不会打包, 用来做继承的父工程, 只负责依赖管理和聚合, 所以不用参与打包
pom.xml
1 | <modelVersion>4.0.0</modelVersion> |
Maven项目结构
1 | ├── pom.xml/ # Maven 项目管理文件 |
WEB-INF目录下的资源是受保护的资源, 不可通过浏览器直接访问
Maven命令构建
在
pom.xml同级目录下运行下面的代码
Maven中测试类的测试方法名需要以testXXX命名, 测试类需要以XXXXTest或TestXXXX命名, 否则不会进行测试如果需要一次性执行多条命令, 可以在
mvn后面跟上多条指令, 比如mvn clean test
| 命令 | 功能 |
|---|---|
mvn compile |
编译项目, 生成target文件, 只会编译核心代码 |
mvn test-compile |
编译测试代码 |
mvn test |
自动执行测试方法 |
mvn package |
打包项目, 生成jar, war文件, 会执行测试代码, 将核心程序和测试程序都进行编译, 但是打包里面不会包含测试程序 |
mvn clean |
清理编译或打包以后的项目结构 |
mvn install |
打包后上传到Maven本地仓库, 如果一个项目需要自己写的另一个项目的jar, 就需要先安装到本地仓库中 |
mvn deploy |
只打包, 上传到Maven私服仓库 |
mvn site |
生成站点 |
mvn test |
执行测试代码 |
1 | <!-- war包打包插件和jdk版本不匹配, 打包war会报错 --> |
生命周期
构建的生命周期可以看作是一组固定构建命令的有序集合, 触发周期后的命令会自动触发周期前的命令
- 构建周期的作用可以简化构建流程
- 一个周期包含若干命令, 包含若干插件
依赖管理
依赖属性
properties中可以指定属性1
2
3
4
5
6
7
8
9
10
11
12<properties>
<junit.version>5.9.2</junit.version>
</properties>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
依赖范围(scope)
对应
jar包的作用范围为: 编译环境, 测试环境, 运行环境
| 范围 | 描述 |
|---|---|
compile |
编译依赖范围, 默认值, 对于三种classpath均有效, Maven在上述三种classpath中均会被引入, 比如log4j在编译, 测试, 运行过程中都是必须的 |
test |
测试依赖范围, 只对测试classpath有效, 比如junit |
provided |
已提供依赖范围, 只对编译和测试classpath有效, 比如servlet-api在运行阶段由于外部环境已经提供了, 所以不需要 |
runtime |
运行时依赖范围, 只对测试, 运行classpath有效, 比如JDBC驱动实现依赖, 在编译时只需要JDK提供的JDBC接口即可, 只有测试和运行阶段才需要实现了JDBC接口的驱动 |
system |
系统依赖范围, 与provided一致, 用于添加非Maven仓库的本地依赖, 通过依赖元素dependency中的systemPath元素指定本地依赖的路径, 使用会导致项目的可移植性降低, 所以一般不使用 |
import |
导入依赖范围, 只能与dependencyManagement元素配合使用, 将目标pom.xml中的dependencyManagement的配置导入合并到当前的pom.xml的dependencyManagement中 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sangs Blog!



