maven

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>

没有配置任何插件,你就可以对工程进行编译和构建了,因为4.0.0使得该工程已经去下载了maven编译构建等所需要的插件了,并且这个插件是全局重用的,另外的本地所有的maven项目都可以使用这些插件

比较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更加繁琐。

显示 Gitment 评论