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.cmd
boot
: 包含有plexus-classworlds
类加载器框架conf
: 包含核心配置文件, 主要是settings.xml
lib
: 包含运行时需要的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.multilang
ArtifactId
:产品线名-模块名
, 语义不重复不遗漏,tc-client
,uic-api
Version
:主版本号.次版本号.修订号
, 不兼容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!