maven中pom.xml详细介绍
pom 代表工程对象模型。它是使用 maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。
pom 包含了关于工程和各种配置细节的信息,maven 使用这些信息构建工程。
pom 也包含了目标和插件。当执行一个任务或者目标时,maven 会查找当前目录下的 pom,从其中读取所需要的配置信息,然后执行目标。能够在 pom 中设置的一些配置如下:
project dependencies
plugins
goals
build profiles
project version
developers
mailing list
在创建 pom 之前,我们首先确定工程组(groupid),及其名称(artifactid)和版本,在仓库中这些属性是工程的唯一标识。
pom 举例
<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>com.companyname.project-group</groupid> <artifactid>project</artifactid> <version>1.0</version> </project>
需要说明的是每个工程应该只有一个 pom 文件。
所有的 pom 文件需要 project 元素和三个必须的字段:groupid, artifactid,version。
在仓库中的工程标识为 groupid:artifactid:version
pom.xml 的根元素是 project,它有三个主要的子节点:
节点 | 描述 |
---|---|
groupid | 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。 |
artifactid | 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupid 和 artifactid 一起定义了 artifact 在仓库中的位置。 |
version | 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
super pom
所有的 pom 都继承自一个父 pom(无论是否显式定义了这个父 pom)。父 pom 也被称作 super pom,它包含了一些可以被继承的默认设置。
maven 使用 effective pom(super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。
查看 super pom 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom
在你的电脑上的任意目录下创建一个 pom.xml 文件,使用上面提到的示例 pom 中的内容。
在下面的例子中,我们在 c:\mvn\project 目录中创建了一个 pom.xml 文件。
现在打开命令控制台,到 pom.xml 所在的目录下执行以下 mvn 命令。
c:\mvn\project>mvn help:effective-pom
maven 将会开始处理并显示 effective-pom。
[info] scanning for projects... [info] searching repository for plugin with prefix: 'help'. [info] ------------------------------------------------------------------------ [info] building unnamed - com.companyname.project-group:project-name:jar:1.0 [info] task-segment: [help:effective-pom] (aggregator-style) [info] ------------------------------------------------------------------------ [info] [help:effective-pom {execution: default-cli}] [info] ..... [info] ------------------------------------------------------------------------ [info] build successful [info] ------------------------------------------------------------------------ [info] total time: < 1 second [info] finished at: thu jul 05 11:41:51 ist 2012 [info] final memory: 6m/15m [info] ------------------------------------------------------------------------
effective pom 的结果就像在控制台中显示的一样,经过继承、插值之后,使配置生效。
<?xml version="1.0" encoding="utf-8"?> <!-- ================================================================= --> <!-- --> <!-- generated by maven help plugin on 2012-07-05t11:41:51 --> <!-- see: http://maven.apache.org/plugins/maven-help-plugin/ --> <!-- --> <!-- ================================================================= --> <!-- ================================================================= --> <!-- --> <!-- effective pom for project --> <!-- 'com.companyname.project-group:project-name:jar:1.0' --> <!-- --> <!-- ================================================================= --> <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 h ttp://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.companyname.project-group</groupid> <artifactid>project</artifactid> <version>1.0</version> <build> <sourcedirectory>c:\mvn\project\src\main\java</sourcedirectory> <scriptsourcedirectory>src/main/scripts</scriptsourcedirectory> <testsourcedirectory>c:\mvn\project\src\test\java</testsourcedirectory> <outputdirectory>c:\mvn\project\target\classes</outputdirectory> <testoutputdirectory>c:\mvn\project\target\test-classes</testoutputdirectory> <resources> <resource> <mergeid>resource-0</mergeid> <directory>c:\mvn\project\src\main\resources</directory> </resource> </resources> <testresources> <testresource> <mergeid>resource-1</mergeid> <directory>c:\mvn\project\src\test\resources</directory> </testresource> </testresources> <directory>c:\mvn\project\target</directory> <finalname>project-1.0</finalname> <pluginmanagement> <plugins> <plugin> <artifactid>maven-antrun-plugin</artifactid> <version>1.3</version> </plugin> <plugin> <artifactid>maven-assembly-plugin</artifactid> <version>2.2-beta-2</version> </plugin> <plugin> <artifactid>maven-clean-plugin</artifactid> <version>2.2</version> </plugin> <plugin> <artifactid>maven-compiler-plugin</artifactid> <version>2.0.2</version> </plugin> <plugin> <artifactid>maven-dependency-plugin</artifactid> <version>2.0</version> </plugin> <plugin> <artifactid>maven-deploy-plugin</artifactid> <version>2.4</version> </plugin> <plugin> <artifactid>maven-ear-plugin</artifactid> <version>2.3.1</version> </plugin> <plugin> <artifactid>maven-ejb-plugin</artifactid> <version>2.1</version> </plugin> <plugin> <artifactid>maven-install-plugin</artifactid> <version>2.2</version> </plugin> <plugin> <artifactid>maven-jar-plugin</artifactid> <version>2.2</version> </plugin> <plugin> <artifactid>maven-javadoc-plugin</artifactid> <version>2.5</version> </plugin> <plugin> <artifactid>maven-plugin-plugin</artifactid> <version>2.4.3</version> </plugin> <plugin> <artifactid>maven-rar-plugin</artifactid> <version>2.2</version> </plugin> <plugin> <artifactid>maven-release-plugin</artifactid> <version>2.0-beta-8</version> </plugin> <plugin> <artifactid>maven-resources-plugin</artifactid> <version>2.3</version> </plugin> <plugin> <artifactid>maven-site-plugin</artifactid> <version>2.0-beta-7</version> </plugin> <plugin> <artifactid>maven-source-plugin</artifactid> <version>2.0.4</version> </plugin> <plugin> <artifactid>maven-surefire-plugin</artifactid> <version>2.4.3</version> </plugin> <plugin> <artifactid>maven-war-plugin</artifactid> <version>2.1-alpha-2</version> </plugin> </plugins> </pluginmanagement> <plugins> <plugin> <artifactid>maven-help-plugin</artifactid> <version>2.1.1</version> </plugin> </plugins> </build> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>maven repository switchboard</name> <url>http://repo1.maven.org/maven2</url> </repository> </repositories> <pluginrepositories> <pluginrepository> <releases> <updatepolicy>never</updatepolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>maven plugin repository</name> <url>http://repo1.maven.org/maven2</url> </pluginrepository> </pluginrepositories> <reporting> <outputdirectory>c:\mvn\project\target/site</outputdirectory> </reporting> </project>
在上面的 pom.xml 中,你可以看到 maven 在执行目标时需要用到的默认工程源码目录结构、输出目录、需要的插件、仓库和报表目录。
maven 的 pom.xml 文件也不需要手工编写。
maven 提供了大量的原型插件来创建工程,包括工程结构和 pom.xml。
总结
以上就是本文关于maven中pom.xml详细介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:maven构建生命周期详细介绍、maven管理springboot profile详解、等,有什么问题可以随时留言,欢迎大家留下宝贵的意见,小编会及时修改。感谢朋友们对本站的支持!