Maven是什么?
Maven全名Apache Maven,是软件开发组织Apache开发的用于Java项目管理的自动构建工具。Maven解决了构建软件两方面的问题:
- 它描述了软件是如何建立的
- 它描述了它的依赖关系
与Apache Ant不同的是,它为创建过程提供了规范。Maven使用XML文件来描述软件项目构建的过程、项目依赖的外部模块和组件、构建顺序、目录和需要的插件等。
什么是POM?
Maven项目通过项目对象模型(Project Object Model)来配置,配置信息存储在一个名为pom.xml
的文件中。pom.xml
是一个Maven项目的核心,一个Maven project可以没有代码,但不能没有pom,因为maven所有一切都是在pom里配置的。
以下是pom.xml的一个例子:
<project>
<!-- model version is always 4.0.0 for Maven 2.x POMs -->
<modelVersion>4.0.0</modelVersion>
<!-- project coordinates, i.e. a group of values which
uniquely identify this project -->
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0</version>
<!-- library dependencies -->
<dependencies>
<dependency>
<!-- coordinates of the required library -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!-- this dependency is only used for running and compiling tests -->
<scope>test</scope>
</dependency>
</dependencies>
</project>
其中,groupId
是我们的组织名称,artifactId
是我们的项目名称,version
是项目的版本号, dependencies
是依赖关系列表。具体的标签含义,可以参考Apache Maven的官方主页:POM Reference,到时候我会写一篇POM的详解。
使用Maven创建Java工程时会自动创建下图所示的目录结构:
Maven中一些重要概念
POM
一个项目对象模型提供了单一项目需要的所有配置。通常的配置有: 项目的名字、所有者、对其他项目的依赖关系等。用户可以通过插件单独配置构建过程的每一小步。例如, 我们可以配置编译插件来使用Java 1.5来进行编译, 或者指定,如果一些单元测试失败也可以进行项目打包。
大项目可以被分为若干个模块或子项目, 每个模块都可以有自己的POM。 POM还可以继承自其他的POM。所有的POM都 默认继承自一个Super POM。Super POM提供了默认的设置,比如默认的源代码目录,默认插件等。
插件
Maven实质上是一个插件执行框架,所有的工作都是通过插件完成的。Maven的插件主要分为构建插件和报告插件。
- 构建插件 将会在构建期间被执行,需要在POM的
元素下配置 - 报告插件 将会在站点生成时被执行,在
部分配置
一个插件通过如下代码执行:
mvn [plugin-name]:[goal-name]
举个例子, 一个Java项目可以通过mvn compiler:compile
用compiler插件的compile功能来编译。
除了上面举出的例子,Maven还提供了丰富的插件功能,比如构建,测试,源代码管理,在服务器上运行,生成Eclipse项目文件等等,具体可以透过Maven Plugins页面进行了解。我们可以通过在pom.xml
文件的
mvn compiler:compile
mvn surefire:test
mvn jar:jar
参考:
Maven wiki
Apache Maven主页
[Maven Reference]http://books.sonatype.com/mvnref-book/reference/