`
hawaii162162
  • 浏览: 76462 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

maven POM的中文参考手册

阅读更多
pom.xmlmaven的核心文件,是maven用来build project的configuration file, 就象Antbuild.xml。for most project,缺省的pom.xml包含了一些default value,通常情况下你不需要在你的pom.xml里设置这些值。例如:
  • 缺省的build directory是“target”目录
  • 缺省的source directory是“src/main/java”目录
  • 缺省的build directory是“src/main/test”目录
 
pom.xmlconfiguration info包括:
  • Project基本信息,如project version, description, developers, mailing lists
  • project dependencies
  • 要执行的plugins or goals
  • build profiles
 
 
下面参考我的第一个maven命令生成的pom.xml来讲解它的配置信息
<project xmlns=。。。。>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <packaging>jar</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>Maven Quick Start Archetype</name>
 <url>http://maven.apache.org</url>
 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
 </dependencies>
</project>
 
project root element of pom.xml files.
modelVersion设置POM version, 类似于设置project version,目前好像maven 2只允许该值为4.0.0
groupId设置projectorganization or group ID,它是project的唯一识别之一(另1个是artifactId)。groupId通常以full domain name作为属性值,例如所有maven pluginsgroupId的属性值为org.apache.maven.plugins
artifactId设置当前project将生成的primary artifactunique base name请注意:是base name,而不是name,因为artifact name是由”<artifactId>-<version>”组成,例如myapp-1.0.jar)。
packaging设置package type to be used by this artifact (e.g. JAR, WAR, EAR, etc.)。该属性值不仅是用来设置被生成的artifactJAR, WAR还是EAR还用来设置package artifact时要processlifecycle,即JAR, WAR, EARbuild lifecycle是不同的packaging的缺省属性值为JAR。如果你的projectpackagejar,你不需要设置该属性
version设置project生成的artifactversionMaven能帮你进行version management如果你看到该属性值里包含有“SNAPSHOTstring,则表示该project处于开发阶段,而不是发布阶段。
name设置project name,该属性值通常用于Maven's generated documentation.
url设置该projectweb site url. 该属性值通常用于Maven's generated documentation
description设置project description该属性值通常用于Maven's generated documentation
 
Super POM
Super POM是Maven's default POM,它设置了maven的基本default value(例如build directory为“target)。它的所有设置会被你的projectpom.xml继承你如果要覆盖缺省设置,就需要进行显式设置。
 
下面是super pom content:
<project>
 <modelVersion>4.0.0</modelVersion>
 <name>Maven Default Project</name>
 
 <repositories>
    <repository>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
 </repositories>
 
 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
 </pluginRepositories>
 
 <build>
    <directory>target</directory>
    <outputDirectory>target/classes</outputDirectory>
    <finalName>${pom.artifactId}-${pom.version}</finalName>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <sourceDirectory>src/main/java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
    </testResources>
 </build>
 
 <reporting>
    <outputDirectory>target/site</outputDirectory>
 </reporting>
</project>
 
Minimal POM
一个pom.xml必须要有的东东是:
  • project root
  • modelVersion - should be set to 4.0.0
  • groupId - the id of the project's group.
  • artifactId - the id of the artifact (project)
  • version - the version of the artifact under the specified group
 
例:
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <version>1</version>
</project>
 
其中的groupId, artifactId and version组成了projectfully qualified artifact name<groupId>:<artifactId>:<version>,例如上例的fully artifact name"com.mycompany.app:my-app:1"
 
在minimal pom里,没有设置<packaging>,那么会使用缺省值:jar。
 
也没有设置<repositories>。如果没有repositories属性,就会继承super pomrepositories配置,maven在执行这个minimal pom时,就会按从缺省的repositorieshttp://repo1.maven.org/maven2 下载相关的dependencies
 
Project Inheritance
Project inheritancechild project继承parent project
 
pom.xml中能被合并(merge)的elements包括:
  • dependencies
  • developers and contributors
  • plugin lists (including reports)
  • plugin executions with matching ids
  • plugin configuration
  • resources
 
Super pom就是project inheritance最典型的例子。你也可以通过在child project pom.xml里设置<parent> element,从而实现继承parent pom。
 
The Scenario
我们使用之前的那个artifact, com.mycompany.app:my-app:1. 同时我们还有另外一个artifact, com.mycompany.app:my-module:1. my-module project的pom.xml为:
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-module</artifactId>
 <version>1</version>
</project>
 
然后我们看看这2个artifact的目录结构
.
 |-- my-module
 |   `-- pom.xml
 `-- pom.xml
 
注意: my-module/pom.xml is the POM of com.mycompany.app:my-module:1 while pom.xml is the POM of com.mycompany.app:my-app:1
 
The Solution
如果我们想让com.mycompany.app:my-app:1成为com.mycompany.app:my-module:1的parent artifact,我们就需要将com.mycompany.app:my-module:1's POM修改成:
com.mycompany.app:my-module:1's POM
<project>
 <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-module</artifactId>
 <version>1</version>
</project>
 
通过<parent> element,可以设置pom的parent pom,从而从parent pom里继承一些配置。
 
另外,如果你想the module的groupId and version设置成和parent一样,那么你可以去掉child pom的groupId and version element。如
<project>
 <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>my-module</artifactId>
</project>
 
这样就会继承parent pomgroupId and version
 
 
Example 2
The Scenario
Example 1能够正常运行的先决条件是:parent project已经install to local repository或者parent project pom.xml必须恰好处于child project pom.xml的上一级目录。
而如果parent project没有install to repository或者象下列结构,使用example 1的代码是不行的:
.
 |-- my-module
 |   `-- pom.xml
 `-- parent
     `-- pom.xml
The Solution
对于上面的目录结构(或者其他不属于example 1的结构),child pom.xml需要添加<relativePath> element来设置你的parent project的path。如:
<project>
 <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
    <relativePath>../parent/pom.xml</relativePath>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>my-module</artifactId>
</project>
 
Project Aggregation
Project aggregationchild project委托parent project执行。它和project inheritance很相似,project inheritance是在child pom.xml里设置parent project,而Project aggregation则是在parent pom.xml里设置child project。,
 
Child project是通过在parent pom.xml里定义<module>来设置Project Aggregation的。Project Aggregation意味着在执行parent project时,也会同时执行定义了aggregationchild project
 
另外还有一点要注意:设置了project aggregationparent project pom.xml必须把<packaging>的值设置为“pom
 
 
Example 3
The Scenario
依然是使用example 1的parent project and child project。
com.mycompany.app:my-app:1's POM
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <version>1</version>
</project>
com.mycompany.app:my-module:1's POM
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-module</artifactId>
 <version>1</version>
</project>
directory structure
.
 |-- my-module
 |   `-- pom.xml
 `-- pom.xml
The Solution
如果我们要把my-module委托给my-app,我们需要修改parent pom.xml如下
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <version>1</version>
 <packaging>pom</packaging>
 
 <modules>
    <module>my-module</module>
 </modules>
</project>
 
Example 4
The Scenario
Example31能够正常运行的先决条件是:child project已经install to local repository或者parent project pom.xml必须恰好处于child project pom.xml的上一级目录。
而如果child project没有install to repository或者象下列结构,使用example 3的代码是不行的:
.
 |-- my-module
 |   `-- pom.xml
 `-- parent
     `-- pom.xml
The Solution
类似于example 3,但是设置child project的path不同。
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <version>1</version>
 <packaging>pom</packaging>
 
 <modules>
    <module>../my-module</module>
 </modules>
</project>
 
 
Project Inheritance VS Project Aggregation
使用Project Inheritance的情况:如果你有多个maven projects, 而且它们有一些相同的配置,那么你就应该refactor你的projects,把这些相同的配置从projects中提取出来,然后把这些相同配置制作成一个parent project,然后你所有的projects都继承该parent projectSuper POM就是最典型的project inheritance例子
使用Project Aggregation的情况:如果你有一组projects常常需要同时进行maven build的操作,那么你就可以创建一个parent project,然后把这组projects作为该parent projectmodules,这样你只需要maven parent project即可执行这组projects。一个典型的例子就是:project Abuild jarproject Bpackage war,该war会把project Ajar纳入, project Cpackage ear,该ear会把project Bwar纳入
当然,你可以同时使用Project Inheritance and Project Aggregation,即在parent project里设置modules,同时在child projects里设置parent project
分享到:
评论

相关推荐

    MAVEN参考手册

    MAVEN参考手册,最新英文指导手册,最适合的参考手册

    Maven权威指南,学习参考手册

    本书不仅全面介绍了Maven的基本概念和操作流程,还深入探讨了Maven在实际项目中的应用技巧,为开发者提供了宝贵的参考资料。 #### Maven概述:约定优于配置的构建工具 Maven是一种遵循“约定优于配置”原则的项目...

    maven3安装配置参考手册

    《Maven 3 安装配置参考手册》 1. 简介 Maven 是一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和项目信息管理。它通过使用一种标准的项目对象模型(Project Object Model,POM)来管理项目,并提供了...

    maven用户开发手册.doc

    总之,《Maven用户开发手册》详细介绍了Maven的各个方面,是开发者掌握Maven不可或缺的参考资料,无论是在理解其核心概念,还是在实际项目中应用,都能提供有力的帮助。通过学习和实践,用户将能更高效地利用Maven...

    Maven1.1使用手册

    - **项目描述符**:解释了 Maven 项目 POM 文件的格式和内容。 - **属性参考**:提供了 Maven 支持的所有属性列表。 - **命令行**:介绍了如何通过命令行来运行 Maven 命令。 - **插件**: - **历史**:回顾了 ...

    maven2学习手册

    ### Maven2 学习手册概览 Maven2作为开源项目的构建工具,相较于其前身Maven1,在功能和性能上进行了显著的优化和扩展。它不仅提升了构建速度,还简化了配置过程,引入了生命周期的概念,并增强了依赖管理,使之...

    HAP框架-Maven入门手册.zip

    然而,由于没有具体的HAP框架的详细信息,这部分内容需要参考提供的文档“HAP框架-Maven入门手册.doc”来获取详细信息。 5. Maven与HAP框架的结合: 在Java项目中,HAP框架通常作为一个依赖被引入到Maven的POM.xml...

    Maven权威指南中文版

    Maven是一种广泛使用的项目管理工具,特别是在Java开发领域。它的主要职责是自动化构建过程,包括...网络上虽然存在大量关于Maven的零散文章,但权威指南通过系统性的编排,提供了一本入门到高级使用的完整参考手册。

    Maven入门到精通

    **Maven入门到精通** Maven,一个强大的Java项目管理工具,由Apache软件基金会...阅读提供的文档,如《Maven入门-概念与实例》、《Maven 参考文档》和《Maven2完全使用手册》,将有助于你更全面地掌握Maven的使用。

    maven 完全手册

    Maven是一种非常流行的Java项目管理和自动构建工具,它基于项目对象模型(Project Object Model,简称POM),...此外,手册也可能会介绍Maven的项目管理、资源处理、插件配置等方面的内容,为开发者提供全面的参考。

    maven使用文档,maven使用文档

    - [Maven 使用手册](http://maven.apache.org/guides/) - [Maven 最佳实践](http://www.mergere.com/m2book_download.jsp) - [Maven 教程](http://www.mkyong.com/maven/) 以上内容涵盖了 Maven 的基本使用方法...

    Maven完全手册

    Maven完全手册 maven2 起步 相信maven1 大家都已经很熟悉了,具体maven能做什么,就不详细说了。个人觉得maven在开源项目中用的还是比较多的,公司内部,就不太清楚了。我以前的公司用过一段时间,不过后来就没有...

    jna-5.5.0.jar中文文档.zip

    jna-***.jar中文文档.zip,java,jna-***.jar,net.java.dev.jna,jna,***,com.sun.jna,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 ...

    maven-plugin-parameter-documenter-2.0.9.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    poi-3.15.jar中文文档.zip

    poi-***.jar中文文档.zip,java,poi-***.jar,org.apache.poi,poi,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,apache,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【poi-***...

    Maven:The Complete Reference

    Maven是由Sonatype公司出版的一本权威指南——《Maven:完整参考手册》(Edition 0.4,2010年2月版)。本书由多位Maven领域的专家共同编写,包括Tim O’Brien、Jason van Zyl、Brian Fox等,这些作者都是Maven项目的...

    maven-profile-2.0.9.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    apache-maven-3.3.3-bin和maven指南.zip

    "Maven权威指南.pdf"则是一份详尽的Maven使用手册,涵盖了Maven的基本概念、配置、插件、构建过程以及高级主题,是学习和掌握Maven的重要资源。书中不仅解释了如何配置和使用Maven,还讨论了最佳实践和常见问题的...

Global site tag (gtag.js) - Google Analytics