通过在 pom.xml 中定义 jar 包版本和依赖,能够方便的管理 jar 文件。pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<build>...</build>
<reporting>...</reporting>
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<license>...</license>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<preprequisites>...</preprequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
Xml代码
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
</project>
Xml代码
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.taobao</groupId>
<artifactId>taobao-parent</artifactId>
<version>2.0</version>
<packaging>pom</packaging>
</project>
packaging 类型需要pom,用于parent和合成多个项目。那么在其下的子项目中加上如下设置用以继承
Xml代码
<parent>
<groupId>com.taobao</groupId>
<artifactId> taobao-parent </artifactId>
<version>2.0</version>
</parent>
Xml代码
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springside</groupId>
<artifactId>springside3-parent</artifactId>
<version>3.3.2</version>
</parent>
<artifactId>mini-web</artifactId>
<packaging>war</packaging>
<name>Springside3's Mini-Web Example</name>
...
</project>
Xml代码
<modules>
<module>tc-client</module>
<module>tc-server</module>
</modules>
Xml代码
<project>
<build>…</build>
<profiles>
<profile>
<build>…</build>
</profile>
</profiles>
</project>
build标签中可以包含很多插件,这些插件可以配置到项目的某些构建阶段,随着项目的构建进程发挥作用。
4 报表部分 我们执行mvn site就可以为项目生成一系列可以用来描述项目信息的网页,maven2中的一大部分插件就是专门在这时候发挥效用的,它们可以根据项目的结构,源代码,测试,SCM信息等,生成各种特殊功能的报表,这要把这些插件配置在reporting标签中,它们就会在执行mvn site的同时起作用。所有的报告将会包括在浏览器的导航栏中。 xml 代码 :Xml代码
<project>
<build>…</build>
<profiles>
<profile>
<build>…</build>
</profile>
</profiles>
<reporting>…</reporting>
</project>
Xml代码
<project>
<build>
…
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.0</version>
<extensions>false</extensions>
<inherited>true</inherited>
<configuration>
<classifier>test</classifier>
</configuration>
<dependencies>…</dependencies>
<executions>…</executions>
</plugin>
</plugins>
</build>
</project>
Xml代码
<build>
<plugins>
<!-- eclipse插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpversion>2.0</wtpversion>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature
</projectnature>
</additionalProjectnatures>
</configuration>
</plugin>
</plugins>
</build>
Xml代码
<project>
<build>
…
<resources>
<resource>
<targetPath>META-INF/plexus</targetPath>
<filtering>false</filtering>
<directory>${basedir}/src/main/plexus</directory>
<includes>
<include>configuration.xml</include>
<includes>
<excludes>
<exclude>**/*.properties</exclude>
<excludes>
</resource>
</resources>
<testResources>
…
</testResources>
…
</build>
</project>
Xml代码
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<type>jar</type>
<scope>test</scope>
<optional>true</optional>
</dependency>
</dependencies>
</project>
我们可以看到dependency标签中也包含了groupId,artifactId和version信息,这三部分就是一个maven2项目所需的最小配置,也是maven2所管理的项目的唯一标识,有了这三个数据,maven2就可以在repo中查找到对应的依赖,并将其包含到我们的项目中,从而实现对依赖库的管理。 上面的依赖中,我们使用了groupId为junit,artifactId为junit,版本为4.0的依赖,这个依赖会在test作用域中起作用,也就是说,只有在进行单元测试的时候,才会用到这个依赖,与之对应的是,当我们的程序正常编译,运行,打包发布时,是不会包含这个依赖的。maven2内置了多个作用域,可以让我们将不同阶段使用的依赖库进行隔离。 8 其它标签description 当前项目的一个细节描述,当需要描述这个项目的时候被Maven所用,比如在web 站点中。 这个元素能够被指定为CDATA 类型,允许在描述器中 HTML的tags, 并不鼓励用空白文本来表示。 如果你需要去修改生成的web 站点的索引页,你能够用你自己的索引来代替自动生成的文本。 url 当前项目的主页的URL prerequisites 描述当前项目的编译环境的先决条件 issueManagement 当前项目的发布管理信息。 ciManagement 当前项目的连续集成信息。 inceptionYear 当前项目开始的年份, 用4位数字描述。 涉及到介绍情况时用作提供版权信息mailingLists 包含的信息包括邮件列表developers 描述当前的项目的开发人员的信息contributors 描述对当前项目有贡献的人员的信息,不特指开发人员licenses 这个元素描述了当前项目的所有的许可文件。每一个许可文件用一个许可元素来描述,然后描述额外的元素。 通常只列出适用于这个项目的许可文件以及适用于 依赖的非licenses.如果多个licenses都列出来了,那么假设这个用户选择其中的所需的,而不是接受所有的许可文件。 scm 指定当前项目中的版本控制工具,比如CVS, Subversion, 等等。 organization 这个元素描述这个项目所属组织的各种属性的描述。这些属性应用于文档创建的时候 (版权通知和链接)。 repositories 发现依赖和扩展的远程资源库。 pluginRepositories 发现plugins 的远程资源库的列表,主要是为了编译和报告dependencies 这个元素描述了所有与当前项目相关的依赖。这些依赖被用作创建一个编译时的路径。 他们被自动的从资源库中下在下来依据当前项目的定义。如需更多信息,参看 the dependency mechanism reports Deprecated.禁止适用。现在的版本中被 Maven所忽略掉。 dependencyManagement 缺省的依赖信息将会从这个元素中继承。这些依赖在这一部分中被不立刻被解决的。当一个源于这个POM的元素描述了一个依赖根据匹配的 groupId 和 artifactId,这个部分的版本和其他值用作那些还没有指定的依赖。 distributionManagement 对于一个项目分配的信息允许对于远程web服务器和资源库的site和artifacts配置。 properties 属性可以作为POM的自始自终的替换物,如果可行的话可以用作resources 的过滤器,格式是<name>value</name>.案例如下:
Xml代码
<!-- 项目属性 -->
<project>
<properties>
<jdbc.driver.groupId>mysql</jdbc.driver.groupId>
<jdbc.driver.artifactId>mysql-connector-java</jdbc.driver.artifactId>
<jdbc.driver.version>5.1.11</jdbc.driver.version>
</properties>
</project>