Maven 是一个项目管理和构建自动化工具。
Maven 使用惯例优于配置的原则 。它要求在没有定制之前,所有的项目都有如下的结构:
目录 |
目的 |
${basedir} |
存放 pom.xml和所有的子目录 |
${basedir}/src/main/java |
项目的 java源代码 |
${basedir}/src/main/resources |
项目的资源,比如说 property文件 |
${basedir}/src/test/java |
项目的测试类,比如说 JUnit代码 |
${basedir}/src/test/resources |
测试使用的资源 |
一个 maven 项目在默认情况下会产生 JAR 文件,另外 ,编译后 的 classes 会放在 ${basedir}/target/classes 下面, JAR 文件会放在 ${basedir}/target 下面。
为了验证我们的程序能运行,执行下面的命令:
~$java -cptarget/helloworld-1.0-SNAPSHOT.jar com.mycompany.helloworld.App
POM(Project Object Model)
一个项目所有的配置都放置在 POM 文件中
在 POM 中,groupId, artifactId, packaging, version 叫作 maven 座标,它能唯一的确定一个项目。一般 maven 座标写成如下的格式:
groupId:artifactId:packaging:version
Maven 插件
一个目标是一个工作单元,而插件则是一个或者多个目标的集合。mvn 本身不会做太多的事情,它把构建的任务交给插件去做。
Maven 生命周期
生命周期指项目的构建过程,它包含了一系列的有序的阶段 (phase),而一个阶段就是构建过程中的一个步骤。插件目标可以绑定到生命周期阶段上。一个生命周期阶段可以绑定多个插件目标。当 maven 在构建过程中逐步的通过每个阶段时,会执行该阶段所有的插件目标。maven 能支持不同的生命周期,但是最常用的是默认的Maven生命周期 (default Maven lifecycle )。
1. process-resources 阶段:resources:resources
2. compile 阶段:compiler:compile
3. process-classes 阶段:(默认无目标)
4. process-test-resources 阶段:resources:testResources
5. test-compile 阶段:compiler:testCompile
6. test 阶段:surefire:test
7. prepare-package 阶段:(默认无目标)
8. package 阶段:jar:jar
Maven 依赖管理
传递依赖是指 maven 会检查被依赖的 jar 文件,把它的依赖关系纳入最终解决的依赖关系链中。
在 POM 的 dependencies 部分中,scope 决定了依赖关系的适用范围。 test, provided, complie
Maven 库
本地库是指 maven 下载了插件或者 jar 文件后存放在本地机器上的拷贝。当 maven 查找需要的 jar 文件时,它会先在本地库中寻找。