Maven 配置
配置镜像
在settings.xml 添加如下
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
配置全局JDK版本
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
<activeByDefault>true</activeByDefault> <!--true,生效状态-->
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
基础概念
Maven 中的坐标
- 向量说明
groupId公司或者组织id,公司或者组织域名的倒序- 例如:com,atguigu.maven
artifactId一个项目啊或者是项目的一个模块id,模块名称,将来作为 Maven 工程的工程名version模块的版本号- 例如:RSHANPSHOT 表示快照版本,正在迭代过程,不稳定的版本
- 例如:RELEASE 表示正式版本
- 坐标在仓库中的位置
上面坐标对应jar 包在Maven 本地仓库中的位置<groupId>net.sf.dozer</groupId> <artifactId>dozer</artifactId> <version> 5.5.1</version>Maven 根目录/net/sf/dozer/dozer/5.5.1
POM 文件
<!-- project 根标签,表示对当前工程进行配置或管理-->
<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/xsd/maven-4.0.0.xsd">
<!-- modelVersion 从 Maven2 开始就固定是4.0.0, 代表当前 pom.xml 所采用的标签结构-->
<modelVersion>4.0.0</modelVersion>
<!-- groupId 公司或者组织开发的某个项目-->
<groupId>com.springbootdemo</groupId>
<!-- artifactId 代表项目下的某个模块-->
<artifactId>springboot-demo</artifactId>
<!-- version 代表当前模块的版本-->
<version>1.0.0-SNAPSHOT</version>
<!-- packaging 当前模块打包方式-->
<!-- jar: 一个Java工程-->
<!-- war: 一个Web工程-->
<!-- pom: 一个管理其他工程的工程-->
<packaging>jar</packaging>
<!-- properties 在Maven中定义属性-->
<properties>
<!-- 可以是Maven提供的,也可以是自己定义的-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- dependencies配置具体的依赖信息 -->
<dependencies>
<!-- dependency 配置一个具体的依赖信息 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>5.0.0</version>
<!-- scope 配置依赖范围 -->
<scope>test</scope>
<exclusions>
<!-- 排除依赖 -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
Maven 命令
运行 Maven 中构建操作相关命令,必须进入到对应项目pom.xml所在的目录执行
-
清理操作
mvn clean: 删除 target 目录 -
编译操作
mvn compile: 主程序编译,编译结果存放目录target/classesmvn test-compile: 测试程序编译,编译结果存放目录target/test-classes -
测试操作
mvn test: 测试报告存放目录target/surefire-reports -
打包操作
mvn package: 存放目录target -
安装操作
mvn install: 本地安装后会将 pom.xml 转换成 *.pom 文件
依赖范围
- compile 和 test 对比
| 参数 | main目录(空间) | test目录(空间) | 开发过程(时间) | 部署到服务器(时间) |
|---|---|---|---|---|
| compile | 有效 | 有效 | 有效 | 有效 |
| test | 无效 | 有效 | 有效 | 无效 |
- compile 和 provided 对比
| 参数 | main目录(空间) | test目录(空间) | 开发过程(时间) | 部署到服务器(时间) |
|---|---|---|---|---|
| compile | 有效 | 有效 | 有效 | 有效 |
| provided | 有效 | 有效 | 有效 | 无效 |
生命周期
| 生命周期 | 作用 | 环节 |
|---|---|---|
| Clean | 清理操作相关 | pre-clean clean post-clean |
| Site | 生成站点相关 | pre-site site post-site deploy-site |
| Default | 主要构建过程 | validate generate-sources process-sources process-resources 复制并处理资源文件,至目标目录,准备打包 compile 编译项目main目录下的源码 process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources 复制并处理资源文件,至目标测试目录 test-compile 编译测试源代码 process-test-classes test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署 prepare-package package 接受编译好的代码,打包成可发布的格式,如:jar pre-integration-test integration-test post-integration-test verify install 将包安装至本地仓库,以让其他项目依赖 deploy 将最终的包复制到远程仓库,让其他开发人员共享或者部署到服务器上运行(借助插件:cargo ) |
POM深入
POM的四个层次
Super POM 是Maven默认POM。除非明确设置,否则所有POM都扩展 Super POM ,这意味着 Super POM 中指定的配置由您为项目创建POM继承
- 总结
- 超级POM:所有POM默认继承,只是有直接和间接之分
- 父POM:这一层可能没有,可能有一层,也可能有很多层
- 当前pom.xml配置POM:我们最多关注和最多使用的一层
- 有效POM:隐含的一层,但是实际上真正生效的一层