Maven

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 阶段前的所有阶段的插件目标:

  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

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.

ref