maven的定义
开发:maven是一个用来把源代码构建成可发布的构件的工具。
项目经路:maven是一个管理工具。1
2一个更正式的 Apache Maven 的定义: Maven是一个项目管理工具,它包含了一个项
目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在 生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
约定优于配置
系统,类库,框架应该假定合理的默认值,而非要 求提供不必要的配置。
举个简单的例子:我们一般不太喜欢这样的软件,运行时提示该文件夹不存在,而更青睐于即使不存在也自动帮我们创建好的软件。
Maven 对约定优于配置的应用不仅仅是简单的默认配置,Maven 的核心插件使用了一组通用的约定,以用来编译源代码,打包可分发的 构件,生成 web 站点,还有许多其他的过程。 Maven 的力量来自它的”武断”,它有 一个定义好的生命周期和一组知道如何构建和装配软件的通用插件。如果你遵循这些约 定,Maven 只需要几乎为零的工作——仅仅是将你的源代码放到正确的目录,Maven 将会帮你处理剩下的事情。总结就是,你得按照规范做。
规范虽然往往让人有一种强迫的感觉,但是maven还是开放了一些配置增加自由度,比如你可以修改仓库的位置,可以自定义插件执行。
插件的全局重用
当你创建一个maven工程的时候,在工程目录下默认生成pom.xml文件:1
2
3
4
5
6
7
8
9
10
11
12
13初始化的pom文件格式统一如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>自定义的groupId</groupId>
<artifactId>自定义的artifactId</artifactId>
<version>版本号</version>
</project>
没有配置任何插件,你就可以对工程进行编译和构建了,因为
比较maven和ant
ant的build.xml构建配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<project name="my-project" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src/main/java"/>
<property name="build" location="target/classes"/>
<property name="dist" location="target"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="org.apache.maven.model.Build@d7e661"/>
</target>
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into org.apache.maven.model. <javac srcdir="${src}" destdir="org.apache.maven.model.Build@d7e661 </target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in org.apache.maven.model.Build@d7e661 into the <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="org.apa </target>
<target name="clean"
description="clean up" >
<!-- Delete the org.apache.maven.model.Build@d7e661 and
maven的构建配置如下:1
2
3
4
5<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId> <artifactId>my-project</artifactId>
<version>1.0</version>
</project>
以上两个功能都是一样的,明显发现,ant构建方式虽然更有自由度,但是相比maven更加繁琐。