Maven详解

原理

  • 采用远程仓库和本地仓库以及一个pom.xml,将pom.xml中定义的jar文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的jar,同一个版本的jar只需要下载一次,避免每个应用都去拷贝jar。

结构

  • 使用目录模板,可以使pom.xml更简洁。因为Maven2已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以resources目录为例:
    • src/main/resources,负责管理项目主体的资源。在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。
    • src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。

生命周期

在 Maven2 中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:

validate,验证工程是否正确,所有需要的资源是否可用。

verify,运行任何检查,验证包是否有效且达到质量标准。

integration-test,在集成测试可以运行的环境中处理和发布包。

generate-sources,产生应用需要的任何额外的源代码,如xdoclet。

compile,编译项目的源代码。

test-compile,编译项目测试代码。

test,使用已编译的测试代码,测试已编译的源代码。

package,已发布的格式,如jar,将已编译的源代码打包。

install,把包安装在本地的repository中,可以被其他工程作为依赖来使用。

deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

如果要执行项目编译,那么直接输入:mvn compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行mvn test时,会先运行mvntest-compile,然后才是mvn test。当然,开发中,我们一般都不会直接操作 Maven 的。而是在 Eclipse 中使用 Maven插件,其中用的最多的命令就是 clean 、compile 、install 、deploy 等。

依赖

Maven 中是通过在pom.xml中添加依赖从而来引入 jar 包的。其原理是:每一个 jar 都会有独立的坐标,Maven就是通过坐标来定位到具体的 jar 的。

就好像平面坐标系一样,通过 x 轴 和 y 轴定位一个坐标点。Maven定义了这样一组规则:世界上任何一个构件都可以使用 Maven 坐标唯一标识,Maven坐标的元素包括 groupId 、artifactId 、version 、packaging、classifier。只要我们提供正确的坐标元素,Maven 就能够找到它。

原文地址:https://www.cnblogs.com/glfcdio/p/8135232.html