一个简单的Maven项目
创建一个简单的项目
$mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook
构建一个简单的项目
$mvn install
简单的项目对象模型(Project Object Model)
Maven真正运行的POM
$mvn help:effective-pom
核心概念
Maven插件和目标(Plugins and Goals)
mvn archetype:create
这里archetype是一个插件标识而create是目标标识。
一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构建的一部分和其它目标一起运行。一个目标是Maven中的一个“工作单元(unit of work)”。
目标通过配置属性进行配置,以用来定制行为。
Maven生命周期(Lifecycle)
一个生命周期是一些阶段的序列
当Maven经过以package为结尾的默认生命周期的时候,下面的目标按顺序被执行:
resources:resources
compiler:compile
resources:testResources
compiler:testCompile
surefire:test
jar:jar
Maven坐标(Coordinates)
POM为项目命名,提供了项目的一组唯一标识符(坐标),并且通过依赖(dependencies),父(parents)和先决条件(prerequisite)来定义和其它项目的关系。
Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者Maven POM里的一个插件。
groupId, artifactId, version和packaging。这些组合的标识符拼成了一个项目的坐标。
Maven空间是项目的一个坐标系统
Maven仓库(Repositories)
Maven仓库的标准是按照下面的目录格式来存储构件,相对于仓库的根目录:
/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
Maven依赖管理(Dependency Management)
一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。这是Maven最强大的特征之一,它支持了传递性依赖(transitive dependencies)。
Maven同时也提供了一种机制,能让你排除一些里不想要的传递性依赖。(使用provided范围)
Maven也提供了不同的依赖范围(dependency scope)。
站点生成和报告(Site Generation and Reporting)
生成文档和报告。
$mvn site
这将会运行site生命周期阶段。它不像默认生命周期那样,管理代码生成,操作资源,编译,打包等等。Site生命周期只关心处理在src/site目录下的site内容,还有生成报告。
Maven提供了很完整的可配置的报告,像Clover报告检查单元测试覆盖率,JXR报告生成HTML源代码相互间引用,这在代码审查的时候非常有用,PMD报告针对各种编码问题来分析源代码,JDepend报告分析源代码中各个包之间的依赖。通过在pom.xml中配置那些报告被包含在构建中,站点报告就可以被定制了。