POM
Project Object Model(项目对象模型)
坐标
在 POM 中,groupId, artifactId, packaging, version 叫作 maven 坐标,它能唯一的确定一个项目。有了 maven 坐标,我们就可以用它来指定我们的项目所依赖的其他项目,插件,或者父项目。一般 maven 坐标写成如下的格式:
groupId:artifactId:packaging:version
- groupId 定义了项目属于哪个组,这有助于在大的范围上区别项目
- artifactId 定义了这个项目在组中唯一的 ID
- version 指明当前项目的版本
其他
- name 是一个用户友好的项目名称
- modelVersion 指定 POM 模型的版本
- packaging 指定了项目发布时的打包类型
Maven项目结构
目录 | 目的 |
---|---|
${basedir} | 存放 pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的 java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说 property文件 |
${basedir}/src/test/java | 项目的测试类,比如说 JUnit代码 |
${basedir}/src/test/resources | 测试使用的资源 |
- 编译后 的 classes 会放在 ${basedir}/target/classes 下面
- JAR 文件会放在 ${basedir}/target 下面(默认情况下会产生 JAR 文件)
Maven 插件
mvn 本身不会做太多的事情,它不知道怎么样编译或者怎么样打包。它把构建的任务交给插件去做。插件定义了常用的构建逻辑,能够被重复利用。这样做的好处是,一旦插件有了更新,那么所有的 maven 用户都能得到更新。
Maven 生命周期
生命周期指项目的构建过程,它包含了一系列的有序的阶段 (phase),而一个阶段就是构建过程中的一个步骤。
maven 能支持不同的生命周期,但是最常用的是默认的Maven生命周期 (default Maven lifecycle )。如果你没有对它进行任何的插件配置或者定制的话,那么上面的命令 mvn package 会依次执行默认生命周期中直到包括 package 阶段前的所有阶段的插件目标:
- process-resources 阶段:resources:resources
- compile 阶段:compiler:compile
- process-classes 阶段:(默认无目标)
- process-test-resources 阶段:resources:testResources
- test-compile 阶段:compiler:testCompile
- test 阶段:surefire:test
- prepare-package 阶段:(默认无目标)
- package 阶段:jar:jar
dependencies
- 在 POM 中,依赖关系是在 dependencies 部分中定义的。
- maven 提供了传递依赖的特性,所谓传递依赖是指 maven 会检查被依赖的 jar 文件,把它的依赖关系纳入最终解决的依赖关系链中。
- 在 POM 的 dependencies 部分中,scope 决定了依赖关系的适用范围。
- 我们还可以指定 scope 为 provided,意思是 JDK 或者容器会提供所需的jar文件。
- scope 的默认值是 compile,即任何时候都会被包含在 classpath 中,在打包的时候也会被包括进去。
Maven 库
远程库
maven 默认的远程库(http://repo1.maven.org/maven2)
本地库
本地库是指 maven 下载了插件或者 jar 文件后存放在本地机器上的拷贝。在 Linux 上,它的位置在 ~/.m2/repository,在 Windows XP 上,在 C:\Documents and Settings\username.m2\repository ,在 Windows 7 上,在 C:\Users\username.m2\repository。
当 maven 查找需要的 jar 文件时,它会先在本地库中寻找,只有在找不到的情况下,才会去远程库中找。
mvn
- mvn install -DskipTests
- mvn clean install : executes the clean build life cycle and the install build phase in the default build life cycle.
- mvn install:install-file -Dfile=xxx.jar -DgroupId=xxx -DartifactId=xxx -Dversion=xxx -Dpackaging=jar
common
- mvn clean : Clears the target directory into which Maven normally builds your project.
- mvn package : Builds the project and packages the resulting JAR file into the target directory.
- mvn package -Dmaven.test.skip=true : Builds the project and packages the resulting JAR file into the target directory - without running the unit tests during the build.
- mvn install : Builds the project described by your Maven POM file and installs the resulting artifact (JAR) into your local Maven repository
build phase command
- mvn pre-clean
- mvn compile
- mvn package
build phases
The most commonly used build phases in the default build life cycle are:
Build Phase | Description |
---|---|
validate | Validates that the project is correct and all necessary information is available. This also makes sure the dependencies are downloaded. |
compile | Compiles the source code of the project. |
test | Runs the tests against the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed. |
package | Packs the compiled code in its distributable format, such as a JAR. |
install | Install the package into the local repository, for use as a dependency in other projects locally. |
deploy | Copies the final package to the remote repository for sharing with other developers and projects. |