一个Maven2工程的核心就是这一个pom.xml,它包含了你的工程详细信息,如:版本、配置、依赖、测试、项目成员等等。学习maven2主要就是学习如何配置pom.xml。
一个简单的而完全可操作的pom.xml如下所示:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <!--maven2-->
<groupId>ctzj_bss</groupId> <!-- 这个项目所属组的id,一般是项目所在的公司或组织的域名 -->
<artifactId>NRC</artifactId> <!-- 项目的id,和groupId一起组成这个项目的一个唯一id,以用在别的maven2工程中 -->
<packaging>jar</packaging> <!-- 最后这个工程的打包类型,在这里是打成jar包 -->
<version>1.0</version> <!-- 版本号 -->
<name>kenan nrc batch</name> <!-- 项目名, 区别于artifactId-->
<description>insert a nrc in kenan db</description> <!-- 项目描述,会出现在生成的工程站点上 -->
<build> <!-- 项目的构建信息 -->
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<outputDirectory>target\classes</outputDirectory>
<testOutputDirectory>target\test-classes</testOutputDirectory>
<directory>target</directory> <!-- 构建后生成文件(jar,site等)所在位置 -->
</build>
<dependencies> <!-- 项目的依赖外接包,maven的优势之一 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<reporting> <!-- 项目报表,有很多插件可供选择 -->
<outputDirectory>target/site</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>
在你配置了你的pom文件后,你就可以使用如下命令来运行maven2
mvn compiler:compile 编译你的原文件
mvn jar:jar 打包
mvn site:site 生成项目站点
接下来逐个介绍pom.xml的各个要素
developor,organization and mail lit
build
dependencies
reporting
1.developor,organization and mail list
可以在pom中加入开发人员列表,项目所属组织信息,邮件列表,这些信息会出现在生成的项目站点上
<organization>
<name>CTZJ BSS</name>
</organization>
<developers>
<developer>
<name>Chen Lin</name>
<organization>ZJHCsoft</organization>
<email>chenlin@zjhcsoft.com</email>
</developer>
</developers>
<mailingLists>
<mailingList>
<name>${pom.name} Dev List</name>
</mailingList>
<mailingList>
<name>${pom.name} User List</name>
</mailingList>
</mailingLists>
2. build
配置项目的构建信息,主要有指定目录,包括源代码、测试源代码、输出目录、资源目录等.如果没有特殊需求以上的pom已经足够了
3. dependencies
配置项目要用到的jar包.自认为maven对jar包的管理是它的一个重要特色.下面是一个jar包的配置:
<dependency>
<groupId>concurrent</groupId>
<artifactId>concurrent</artifactId>
<version>1.3.4</version>
<scope>compile</scope>
</dependency>
groupId: 没有特定的含义,一般来自同一组织的jar包会有相同的groupId值
artifactId: 这个jar的id,一般是这个jar包的名称
version: jar包的版本号,一般情况下,artifactId-version.jar就是这个jar包的文件名
scope: 这个jar所影响的范围,compile指它会在编译源代码时用到.还有test,provide,runtime等值
如果你不知道jar包的groupId和artifactId,可以到http://www.mavenregistry.com/ 进行查询
一旦指定后,当你进行编译时,它就会到你的本地资源库
另,如果你引入本地包,则需要先行将它安装到本地资料库(repository),使用如下命令
mvn install:install-file -DgroupId=%groupId% -DartifactId=%artifactId% -DgeneratePom=true -Dfile=%file% -Dpackaging=jar -Dversion=%version%
4. reporting
通过使用相应的report plug-in可以生成各种各样的report.如javadoc,junit test report,代码检查等
常用的常见有
<plugin>
<groupId>org.apache.maven.plugins</groupId> <!--java doc -->
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId> <!-- 代码检查 -->
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>config/sun_checks.xml</configLocation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId> <!-- test 结果报表 -->
<artifactId>surefire-report-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId> <!-- 源代码的HTML化 -->
<artifactId>jxr-maven-plugin</artifactId>
</plugin>
在maven的官方网站有可以找到更多的report plugin
最后一个比较完整的pom.xml看起来像这样:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>CutoverModule</name>
<groupId>ctzj_batch</groupId>
<artifactId>eai_cutover</artifactId>
<url>http://134.98.83.137:8081/scarab/issues</url>
<inceptionYear>2006</inceptionYear>
<organization>
<name>CTZJ BSS</name>
<url>http://www.zjhcsoft.com</url>
</organization>
<version>1.0</version>
<description>97 cutover batch module:invoke eai-adapter to update the phone number or value of
c4/c5</description>
<developers>
<developer>
<name>Chen Lin</name>
<organization>ZJHCSoft</organization>
<email>chenlin@zjhcsoft.com</email>
</developer>
</developers>
<mailingLists>
<mailingList>
<name>${pom.name} Dev List</name>
</mailingList>
</mailingLists>
<build>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<outputDirectory>target\classes</outputDirectory>
<testOutputDirectory>target\test-classes</testOutputDirectory>
<directory>target</directory>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.1.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
<ciManagement>
<system>continuum</system>
<url>http://localhost:8080/continuum/servlet/continuum</url>
</ciManagement>
<scm>
<connection>scm:local|E:/eclipseworkshop|EAIBatch</connection>
</scm>
<dependencies>
<dependency>
<groupId>ctzj_batch</groupId>
<artifactId>Eaiadapter</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ctzj_batch</groupId>
<artifactId>ta</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ctzj_batch</groupId>
<artifactId>grnds-common</artifactId>
<version>4.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>concurrent</groupId>
<artifactId>concurrent</artifactId>
<version>1.3.4</version>
<scope>compile</scope>
</dependency>
</dependencies>
<reporting>
<outputDirectory>target/site</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>config/sun_checks.xml</configLocation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>surefire-report-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jxr-maven-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>
maven的POM结构
[ 作者: | 来源:| 点击数: <script src="maven的POM结构-教程-源码-下载.files/Click.htm" type="text/javascript"></script> 65 ]
<!-- 参加开发的人员 -->
<developers>
<developer>
<name>Dave Blackett (Jetspeed logos)</name>
<id/>
<email>blackett@black.com</email>
<organization/>
</developer>
......
</developers>
******项目相关性部分******与一个中央构件资源库一起使用,将消除几个常见的构建问题
<!---------------------------------------------------- -->
<!-- 项目相关性部分 -->
<!---------------------------------------------------- -->
<!--build过程中maven依据之建立classpath,并且maven会到remote repository自动下载这些dependencies ,如type是jar,下载的文件就是<artifactId>-<version>.jar-->
<dependencies>
<!-- 项目依赖JAR文件 "activation-1.0.1.jar",文件在Maven repository
的activation/jars子目录,并且如果资源库中找不到,maven会在自动从maven.repo.remote下载(《maven安装使用》中提到的修改是因为maven的缺省设置远程资源库无法连接上)-->
<dependency>
<id>activation</id>
<version>1.0.1</version>
<properties>
<war.bundle.jar>true</war.bundle.jar>
</properties>
</dependency>
</dependencies>
groupId 告诉 Maven 资源库内哪个子目录中包含相关性文件。
artifactId 告诉 Maven 该构件的唯一标识。如果是jar文件,可以理解为去掉后缀和版本号的文件名 。
version 表示相关性的版本号。
jar (可选的)表示相关性的 JAR 文件。在绝大多数情况下,可以从相关性的 <artifactId> 和 <version> 构造 JAR 文件的名称。
type (可选的)相关性的类型;如 jar 和分发版等。缺省值是 jar。
url 可选的)相关性项目的 URL,在相关性是在因特网上找到的第三方库时非常有用。
properties dependency还有properties可以设定,具体要参照各自引用的plugin
******项目构建部分******
<!---------------------------------------------------- -->
<!-- 项目build和reports部分 -->
<!---------------------------------------------------- -->
<build>
<!-- (OPTIONAL) 定义源文件位置. -->
<sourceDirectory>src/java</sourceDirectory>
<!-- (OPTIONAL) 定义单元测试源文件位置. -->
<unitTestSourceDirectory>test/java</unitTestSourceDirectory>
<!-- (OPTIONAL) 单元测试用例文件模式. -->
<unitTest>
<!-- 排除测试 -->
<excludes>
<exclude>org/apache/jetspeed/services/registry/TestRegistryCategories.java</exclude>
......
</excludes>
<!-- 包含测试 -->
<includes>
<include>**/Test*.java</include>
</includes>
<!-- 单元测试使用的资源 -->
<resources>
<resource>
<!-- 资源位置,project.xml的相对路径 -->
<directory>${basedir}/src/java</directory>
<!-- 排除文件 -->
<excludes>
<exclude>**/*.java</exclude>
</excludes>
<!-- 包含文件 -->
<includes>
<include>org/apache/jetspeed/modules/localization/JetspeedLocalization_*.properties</include>
</includes>
</resource>
.......
</resources>
</unitTest>
<!-- 项目使用的资源,结构与单元测试使用的资源结构相同 -->
<resources>
<resource>
......
</resource>
.......
</resources>
<!-- (OPTIONAL) 使用maven site生成站点的时候被引用,并以指定的顺序排列在导航条内,report指定生成报告的plugin -->
<reports>
<report>
<report>maven-tasklist-plugin</report>
<report>maven-changelog-plugin</report>
<report>maven-javadoc-plugin</report>
分享到:
相关推荐
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目...Maven的主要目标是允许开发人员理解完整的 在最短的时间内完成开发工作。简化构建过程,提供统一的构建系统,提供高质量的项目信息,鼓励更好的发展做法。
附件详细的介绍了Maven依赖在POM文件中的表示、依赖范围的含义以及传递性依赖的使用,也包含依赖调解的两个内容。
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包
Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一条中央信息中管理项目的构建、报告和文档。 压缩包内容: apache-maven-3.8.1-bin.zip、 apache-maven-3.8.1-bin.tar.gz...
Apache Maven是一个软件项目管理和理解工具。 基于项目对象模型(POM)的概念,Maven可以从中心信息中管理项目的构建、报告和文档。
通过servlet-api进一步理解provided依赖范围 · 24.通过jsp-api体验jar包之间的冲突 · 25.导入Maven工程 · 26.第三个Maven工程 · 27.依赖的传递性 · 28.依赖的排除 · 29.依赖的原则说明 · 30.依赖的...
好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下: 使用目录模板,可以使pom....
附件是在学习Maven时对于Maven仓库的理解,通过实例演示POM文件中指定下载依赖的仓库,settings.xml中指定仓库认证信息和POM中指定要部署项目输出构建的仓库信息的演示
Maven by Example pdf英文原版,例子简单明了,对理解maven非常有帮助,maven模块化使用讲解清晰
Apache Maven (apache-maven-3.8.4-src.tar.gz 源代码)是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一条中央信息中管理项目的构建、报告和文档。
本课程旨在帮助学员深入理解并掌握Maven这一强大的项目管理和构建工具,从而提高软件开发的效率和质量。 课程内容从Maven的基本概念讲起,详细介绍了Maven的安装过程、环境配置、以及如何通过Maven进行项目构建和...
Apache Maven (apache-maven-3.8.4-bin.zip)是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一条中央信息中管理项目的构建、报告和文档。
- [1.2 Maven主要作用理解](#12-Maven主要作用理解) - [1.3 Maven安装和配置](#13-Maven安装和配置) - [二、基于IDEA的Maven工程创建](#二基于IDEA的Maven工程创建) - [2.1梳理Maven工程GAVP属性](#21梳理Maven...
使用 proguard 混淆代码只能增加阅读和理解的难度, 并不能百分百保证代码安全。常用的应用场景是项目需要部署到客户机器上,一定程度上防止代码泄露。 springboot多maven工程结构:proguard-root 是顶级父工程,...
采用图例方式将maven管理中需要注意的地方列出来,以方便新的项目搭建框架及开发中注意目录、文件命名及存放要求,方便理解学习maven项目。
NULL 博文链接:https://huangyongxing310.iteye.com/blog/2332841
Apache Maven (apache-maven-3.8.2-bin.zip)是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一条中央信息中管理项目的构建、报告和文档。
Maven非常强大的重要原因是它有十分完善的生命周期模型 lifecycle 这个生命周期可以从两方面来理解 第一 顾名思义 运行Maven的每个步骤都由它来定义的 这种预定义的默认行为使得我们使用Maven变得简单 相比而言 Ant...
以前做过的项目中,没有...最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在了解阶段,没有深入的使用与理解,刚好最近看了一篇关于Maven的详解;就开始深入学习一下Maven的具体应用。