Maven笔记
- 配置本地仓库位置
- 配置阿里云的源
- 约定的项目结构
- 常用的命令
- 生命周期
- 安装maven插件
- 依赖传递
- 依赖冲突
- 依赖范围
- 聚合
- 继承
下载,环境变量配置跳过
首先设置\conf\settings.xml文件
配置本地仓库位置
<localRepository> D:/repo </localRepository>
配置阿里云的源
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云谷歌仓库</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云阿帕奇仓库</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云spring仓库</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云spring插件仓库</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
</mirrors>
约定的项目结构
main
java
package //源码
test
java
package //单元测试
resources //资源
常用的命令
compile 编译
test 运行单元测试
package 打包
clean 清除target
install 安装jar包到本地仓库中
生命周期
周期 | 含义 |
clean | 清理项目 |
default | 构建项目(最核心) |
site | 生成项目站点 |
clean 的三个阶段
pre-clean 执行清理前的工作
clean 清理上一次构建生成的所有文件文件
post-clean 执行清理后的文件
default 常用的几个阶段
compile 编译
test 测试
package 打包
install 安装包到本地仓库
site 的四个阶段
pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上
安装maven插件
修改pom.xml文件
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!--绑定插件到某个执行步骤-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!--这里就是绑定source插件到package,执行package时会执行source,试过了,不知道为什么不好使-->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
依赖传递
如果A依赖B,B依赖C,那么A也会依赖C
如果我们依赖B的时候,不希望依赖B所依赖的C,那么我们可以用如下配置排除B的依赖项依赖
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
<exclusions>
<exclusion>
<groupId>C</groupId>
<artifactId>C</artifactId>
</exclusion>
</exclusions>
</dependency>
排除B的所有依赖项
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖冲突
最短路径优先
比如A依赖B,B依赖C,同时B依赖M的1.0版本,然后C又依赖M的2.0版本,那么A会遵循B的依赖,依赖的是M的1.0版本
先声明优先
比如A依赖B,A又依赖C,同时B依赖M的1.0版本,C又依赖M的2.0版本,那么在A的pom.xml文件中,对谁的依赖写在前面,A就遵循谁的依赖
依赖范围
具体看这个人的文章吧
聚合
假设有如下几个模块
chameleon-core
chameleon-simple
chameleon-common
chameleon-config-web
chameleon-web
chameleon-sso
在父项目的pom.xml文件中添加
<modules>
<module>chameleon-core</module>
<module>chameleon-simple</module>
<module>chameleon-common</module>
<module>chameleon-config-web</module>
<module>chameleon-web</module>
<module>chameleon-sso</module>
</modules>
然后在执行一个build的时候就会将这些一起build了
继承
建立一个项目,pom.xml中进行如下配置,除了packaging节点,其他都是你自己起名的,注意
packaging节点改成pom
<groupId>com.chameleon</groupId>
<artifactId>chameleon</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
在子项目的pom.xml文件中添加如下内容,就会继承父pom了
<parent>
<artifactId>chameleon</artifactId>
<groupId>com.chameleon</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
将版本号提取成属性
在pom.xml的properties节点中添加随便起名的节点,我起名为junit.ver
<properties>
<junit.ver>4.12</junit.ver>
</properties>
然后使用该属性的时候就这样使用就可以了
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.ver}</version>
<scope>test</scope>
</dependency>
dependencyManagement标签,在父项目的pom.xml文件中,添加这个标签
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.ver}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
</dependencies>
</dependencyManagement>
然后在子项目中引用junit的时候就不再需要声明version和scope了
需要注意的是dependencyManagement标签不会引入相关的jar,他只是对依赖的声明,当子项目需要引用dependencyManagement中声明的依赖时,需要在pom.xml中显式的声明
子项目中进行如下的声明才会真正的引用相关jar包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>