maven
- 菜鸟教程详细介绍
- POM: Project Object Model
- modelVersion 模型版本需要设置为 4.0
- 所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。查看默认super dom:
mvn help:effective-pom
- SCM:Source Control Management
- pluginManagement、dependencyManagement:不会被立即解析,而是当子项目声明时,才会解析并引用。用来统一管理项目的相关版本信息
- mvn clean dependency:copy-dependencies package
- clean, package 是构建阶段
- dependency:copy-dependencies 是目标
- Maven构建的生命周期
- mvn post-clean 时,会执行 pre-clean, clean, post-clean
- mvn build 主要过程:validate, compile, test, package, verify, install, deploy
- Maven仓库
- local:
.m2/respository/
- center: 远程的仓库,由 Maven 社区管理
- remote: Maven 将从远程仓库中下载该 pom.xml 中声明的所依赖的(在中央仓库中获取不到的)文件
- local:
仓库
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为国内的仓库。以阿里仓库为例:
- 方法一:修改
setting.xml
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
- 方法二:修改
pom.xml
文件
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
execution
<plugins>
<!--plugin元素包含描述插件所需要的信息。-->
<plugin>
<!--插件在仓库里的group ID-->
<groupId/>
<!--插件在仓库里的artifact ID-->
<artifactId/>
<!--被使用的插件的版本(或版本范围)-->
<version/>
<!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。-->
<extensions/>
<!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->
<executions>
<!--execution元素包含了插件执行需要的信息-->
<execution>
<!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->
<id/>
<!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->
<phase/>
<!--配置的执行目标-->
<goals/>
<!--配置是否被传播到子POM-->
<inherited/>
<!--作为DOM对象的配置-->
<configuration/>
</execution>
</executions>
<!--项目引入插件所需要的额外依赖-->
<dependencies>
<!--参见dependencies/dependency元素-->
<dependency>
......
</dependency>
</dependencies>
<!--任何配置是否被传播到子项目-->
<inherited/>
<!--作为DOM对象的配置-->
<configuration/>
</plugin>
</plugins>
dependencyManagement 和 dependencies 的区别
- dependencyManagement 统一管理依赖版本,申明后,子模块中只需在 dependencies 中指明 groupId, artifactId 即可,版本依赖dependencyManagement中申明。若子项目不指定,则不引入模块
- 子模块完全继承parent的dependencies并加载
- 最佳实践:parent统一管理项目依赖包版本
dependency scope
- compile 编译、测试、打包、运行 阶段。默认值
- provided 相当于 compile,但运行环境已经包含了,不需要我们打包包含,比如:web运行环境已经包含 servlet-api.jar
- runtime 测试、运行 阶段
- test 测试 阶段
- system 类似provided,但是被依赖项不是从maven库找,而是从系统找
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>
Maven 的 Snapshot 版本与 Release 版本
Snapshot
不稳定版本,maven
会经常更新Release
版本,有缓存,maven
就不会去更新- 正式环境不能使用
Snapshot