一.maven主要属性
内置属性
1. ${basedir} //项目的根目录(包含pom.xml文件的目录)
2. ${version} //项目版本
POM属性
用户可以使用该属性引用POM文件中对应元素的值,常用的POM属性包括:
${project.build.sourceDirectory}:项目的主源码目录,默认为 src/main/java
${project.build.testSourceDirectory}:项目的测试源码目录,默认为 src/test/java
${project.build.directory}:项目构件输出目录,默认为 target/
${project.outputDirectory}:项目主代码编译输出目录,默认为 target/classes/
${project.testOutputDirectory}:项目测试代码编译输出目录,默认为 target/test-classes/
${project.groupId}:项目的 groupId
${project.artifactId}:项目的 artifactId
${project.version}:项目的 version,与${version}等价
${project.build.fianlName}:项目打包输出文件的名称。默认为${project.artifactId}-${project.version}
二.maven文件结构
- bin:包含了maven的运行脚本文件。
- boot:maven的依赖的类加载器。
- conf:非常重要,maven的全局配置文件(settings.xml),定制maven的运行行为。
- lib:maven依赖的jar包(重点:maven-model-builder-3.2.5.jar)
- .m2文件夹:运行一个maven命令(如:mvn help:system),会发现在用户个人文件夹下,生成一个.m2文件夹里面有一个repository文件夹,里面是刚下载的jar文件。
最佳实践:
- 将maven的conf/settings.xml拷贝到.m2中,作为个人maven配置文件;
- 重新定位repository目录地址:中配置
三.POM文件简介
- modelVersion:指定maven模型版本,必须是4.0.0,不需要修改
- groupId:组id,一般只公司名称,并且对应项目包名称(如com.csj.maven,groupid一般到项目)
- artifactId:定义当前maven项目在组中的唯一id(一般指向当前子项目/模块名称)
- version:定义当前maven项目的版本号
- name:项目更直白的名称,可以不用写
四.坐标
maven中坐标就是用来规范maven唯一标志一个构建的方法 maven坐标构成包括:
- groupId:项目id
- artifactId:项目中maven项目/模块名称
- version:项目版本
- packing:打包方式,比如jar、war、pom等
- classifier:附属构件,如source,javadoc等,但是注意,一般不会直接定义classifier,附加构件不是直接定义的,是插件帮助构件的;
生成的文件名是根据坐标生成的,规则:artifactId-version[-classifier].packing
在仓库中的位置也是根据坐标生成的;
五.依赖
一个完成的依赖配置包括
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<type></type>
<scope>test</scope>
<optional></optional>
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
- groupId:该依赖项目的groupId;
- artifactId:该依赖项目的artifactId;
- version:该依赖项目的版本;(也是通过这三个坐标找到jar包位置)
- type:依赖项目的类型,对应坐标中的packing,即文件类型,一般不填,默认为jar;
- scope:该依赖项目的依赖范围;
- optional:标记依赖是否可选;
- exclusion:设置排除依赖传递性;
六、仓库
仓库是用于统一管理和存放依赖包的地方; 仓库中依赖包存放的方式和坐标的对应关系是: groupId/artifactId/version/artifactId-version.packing 仓库分类:本地仓库和远程仓库;组件仓库和插件仓库。
超级POM中:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
-
id:仓库的id,只有中央仓库id为central,仓库的id必须唯一,如果其他仓库id覆盖central,则相当于覆盖了中央仓库;
-
url:仓库的URL地址;
-
layout:仓库的布局,MAVEN2以上都用default;
-
snapshots:代表不从中央仓库中下载快照版本;
可以在POM中配置其他的公共仓库;
仓库的镜像:如果一个仓库完全和中央仓库同步,我们就可以选择本地的这种仓库作为中央仓库的镜像仓库;
在settings.xml中配置:
<mirror>
<id>maven.cn</id>
<mirrorOf>central</mirrorOf>
<name>cn</name>
<url>http://maven.net.cn/content/groups/public/</url>
</mirror>
<mirrorOf>:
*:匹配所有的仓库(比如配置私服)
external:*:所有远程仓库(localhost,file除外);
rep1,rep2:仓库1和仓库2;
*,!rep1:除了仓库1其他所有的;