Maven学习系列--04Maven深入

来源:互联网 发布:淘宝评价过期有信誉 编辑:程序博客网 时间:2024/05/19 18:48

Maven 插件 (Plugins)

在前面,我们创建、编译、打包、测试、运行简单的 Maven 项目这一流程中,我们知道若是第一次运行 Maven,执行 Maven 命令(如:mvn archetype:generate), 控制台窗口会输出一系列的 Downloading xxx 信息。那么这是什么原因呢?这就是 Maven 插件的作用了。
当我们下载 Maven 的时候,得到的仅仅是一个包含了基本躯壳的 Maven核心,它仅仅只知道如何解析命令行,管理 classpath,解析 POM 文件。Maven 的核心对我们项目构建中特定的任务几乎毫无所知。就其本身来说,Maven 并不知道如何编译你的代码,甚至不Maven 插件,像 Compiler 插件和 Jar 插件,这些 Maven 插件在需要的时候(如执行 mvn clean compile 这类的命令时)被下载下来并且定时的从 Maven 中央仓库更新。这就是为什么第一次执行Maven 命令时会出现一大堆的 Downloading xxx 信息的原因了(简而言之,就是下载相应的 Maven 插件)。

Maven 仓库 (Repositories)

还是使用刚说的那个 Downloading xxx 信息输出的例子来引出 Maven 仓库的概念。我们 Downloading xxx 就是从 Maven远程仓库中下载相应的 Maven 插件、依赖等。Maven 的远程仓库(地址:http://repo1.maven.org/maven2/) 被用来下载Maven核心插件和依赖。打开浏览器,输入远程仓库地址,坐标为 org.apache.commons:commons-io:1.3.2 的构件能在目录 /org/apache/commons/commons-io/1.3.2/ 下找到,其文件名为 commons-io-1.3.2.jar。

note4_1

Maven 仓库的标准是按照下面的目录格式来存储构件,相对于仓库的根目录:    /< groupId >/< artifactId >/< version >/< artifactId >-<version>.< packaging >

Maven从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里。Maven仓库既是一个从远程仓库下载的构件的缓存,也允许你的项目相互依赖。

Maven依赖管理 (Dependency Management)

一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。这是 Maven 最强大的特征之一,它支持了传递性依赖(transitive dependencies)。假如你的项目依赖于一个库,而这个库又依赖于五个或者十个其它的库(就像Spring或者Hibernate那样)你不必找出所有这些依赖然后把它们写在你的 pom.xml 里,你只需要加上你直接依赖的那些库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。Maven 也会处理这些依赖中的冲突,同时能让你自定义默认行为,或者排除一些特定的传递性依赖。

在Maven中一个依赖不仅仅是一个JAR。它是一个POM文件,这个POM可能也声明了对其它构件的依赖。这些依赖的依赖叫做传递性依赖,Maven仓库不仅仅存贮二进制文件,也存储了这些构建的元数据(metadata)才使传递性依赖成为可能。

站点生成和报告 (Site Generation and Reporting)

Maven的另一个重要特征是,它能生成文档和报告。在 maven_hello_world 目录下运行命令 mvn site。将会运行 Site 生命周期阶段。运行结果如下:

note4_2
note4_3

Site 生命周期只关心处理在 src/site 目录下的 site 内容,还有生成报告。在这个命令运行过之后,我们可以看到项目 target 目录变化:

note4_4

我们可以在 target/site 目录下看到一个项目web站点。打开 index.html,显示如下:

note4_index
note4_index2

1 0