`
seandeng888
  • 浏览: 157933 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

项目管理工具maven之POM(项目对象模型)

阅读更多

       经过将近一周的学习,虽然深感收获颇丰,但更多的还是觉得需要学习的还有很多很多。真是路漫漫其修远兮。接下去就把本周的学习内容总结一下。

POM

        POM全称是Project Object Model,即项目对象模型。pom.xmlmaven的项目描述文件。pom.xml文件以xml的形式描述项目的信息,包括项目名称、版本、项目id、项目的依赖关系、编译环境、持续集成、项目团队、贡献管理、生成报表等等。

基本配置

<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>org.seandeng</groupId>

  <artifactId>myapp</artifactId>

  <version>1.0</version>

</project>

modelVersion 描述这个POM文件是遵从哪个版本的项目描述符,目前只能是4.0.0

groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)

artifactId 在给定groupID group里面为artifact 指定的标识符是唯一的 artifact 代表的是被制作或者被一个project应用的组件(产出物)

version 当前项目产生的artifact的版本

以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。

文件结构

<project>

  <modelVersion>4.0.0</modelVersion>

  <groupId>...</groupId>

  <artifactId>...</artifactId>

  <version>...</version>

  <packaging>...</packaging>  //打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par

  <dependencies>...</dependencies>

  <parent>...</parent>

  <dependencyManagement>...</dependencyManagement>

  <modules>...</modules>

  <properties>...</properties>

  <!- Build Settings  项目的编译设置->

  <build>...</build>

  <reporting>...</reporting>

  <!- More Project Information 其它项目信息 ->

  <name>...</name>  //  描述项目的名称

  <description>...</description>

  <url>...</url>  //  写明开发团队的网站

  <inceptionYear>...</inceptionYear>

  <licenses>...</licenses>

  <organization>...</organization>

  <developers>...</developers>

  <contributors>...</contributors>

  <!-- Environment Settings  ->

  <issueManagement>...</issueManagement>

  <ciManagement>...</ciManagement>

  <mailingLists>...</mailingLists>

  <scm>...</scm>

  <prerequisites>...</prerequisites>

  <repositories>...</repositories>

  <pluginRepositories>...</pluginRepositories>

  <distributionManagement>...</distributionManagement>

  <profiles>...</profiles>

</project>

POM很重要的3个关系

POM3个很重要的关系:依赖、继承、合成。

依赖关系

<dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.0</version>

      <type>jar</type>

      <scope>test</scope>

      <optional>true</optional>

    </dependency>

    ...

</dependencies>

如果想依赖一个maven库中没有的一个jar包,方法很简单,就是先将此jar包使用以下的命令安装到本地maven库中:

mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1

再把依赖关系加进去即可。

继承关系

父项目配置

<project>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.seandeng</groupId>

  <artifactId>my-parent</artifactId>

  <version>2.0</version>

  <packaging>pom</packaging>

</project>

packaging 类型,定义值为 pom用于定义为parent和合成多个项目。当然我们创建的maven项目的pom都继承mavensuper pom如果想看项目(父或子)的完全的pom结构,可以运行:

mvn help:effective-pom

就可以了。

子项目配置

<project>

   <modelVersion>4.0.0</modelVersion>

   <groupId>com.seandeng</groupId>

   <artifactId>my-child-project</artifactId>

   <parent>

        <groupId>com.seandeng</groupId>

        <artifactId>my-parent</artifactId>

        <version>2.0</version>

        <relativePath>../my-parent</relativePath>

    </parent>

</project>

relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

合成关系

一个项目有多个模块。 如下的定义:

<project>

   <modelVersion>4.0.0</modelVersion>

   <groupId>com.seandeng</groupId>

   <artifactId>my-parent</artifactId>

   <version>2.0</version>

   <modules>

       <module>my-child-project1<module>

       <module>my-child-project2<module>

   </modules>

</project>

其中module 描述的是子项目的相对路径

dependencies

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>

scope:compile(编译范围), provided(已提供范围), runtime(运行时范围), test(测试范围), system(系统范围)

exclusions如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion.

Properties

POM片段:

<properties>

    <hibernate.annotations.version>3.3.0.ga</hibernate.annotations.version>

</properties>

 

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-annotations</artifactId>

<version>${hibernate.annotations.version}</version>

</dependency>

特殊的属性引用片段:

<parent> 

… …

<version>1.0-SNAPSHOT</version> 

</parent>

<dependencies> 

<dependency> 

    … …

    <version>${project.version}</version>//这个值是一个属性引用,指向了POMproject/version的值

     </dependency>

</dependencies>

dependencyManagement

        Maven还我们提供了一个dependencyManagement元素,用来提供了一种方式来统一依赖版本号。dependencyManagement元素一 般用在顶层的父POM。使用pom.xml中的dependencyManagement元素能让你在子项目中引用一个依赖而不用显式的列出版本号。 Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个 dependencyManagement元素中指定的版本号,这样就解决了修改依赖版本号不完全的问题。示例如下:

顶层的父POM片段:

  <dependencyManagement>

    <dependencies>

      <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring</artifactId>

        <version>2.0.7</version>

      </dependency>

    </dependencies>

  </dependencyManagement>

子项目POM片段:

  <dependencies>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring</artifactId>

    </dependency>

  </dependencies>

Repositories

Repositories:个性化的指定仓库地址。

<repositories> 
    <repository> 
      <releases> 
        <enabled>false</enabled> 
        <updatePolicy>always</updatePolicy> 
        <checksumPolicy>warn</checksumPolicy> 
      </releases> 
      <snapshots> 
        <enabled>true</enabled> 
        <updatePolicy>never</updatePolicy> 
        <checksumPolicy>fail</checksumPolicy> 
      </snapshots> 
      <id>codehausSnapshots</id> 
      <name>Codehaus Snapshots</name> 
      <url>http://snapshots.maven.codehaus.org/maven2</url> 
      <layout>default</layout> 
    </repository> 
  </repositories> 

releasesnapshots:是artifact的两种policiespom可以选择那种政策有效。 
updatePolicy:
说明更新发生的频率always 或者 never 或者 daily(默认的)或者 interval:XX是分钟数) 

checksumPolicy:当Maven的部署文件到仓库中,它也部署了相应的校验和文件。您可以选择忽略,失败,或缺少或不正确的校验和警告。

layoutmaven1.xmaven2有不同的layout,所以可以声明为default或者是legacy(遗留方式maven1.x)。

Profile

        MavenProfile元素可以为一个特殊的环境自定义一个特殊的构建,使得不同环境间构建的可移植性成为可能。比如要使用 production profile来运行mvn install,你需要在命令行传入-Pproduction参数,这里productionprofileid。要验证production profile覆盖了默认的Compiler插件配置,可以像这样以开启调试输入(-X) 的方式运行Maven

它包含可选的activationprofile的触发器)和一系列的changes。例如test过程可能会指向不同的数据库(相对最终的deployment)或者不同的dependencies或者不同的repositories,并且是根据不同的JDK来改变的。那么结构如下: 
  <profiles> 

    <profile> 
      <id>test</id> 
      <activation>...</activation> 
      <build>...</build> 
      <modules>...</modules> 
      <repositories>...</repositories> 
      <pluginRepositories>...</pluginRepositories> 
      <dependencies>...</dependencies> 
      <reporting>...</reporting> 
      <dependencyManagement>...</dependencyManagement> 
      <distributionManagement>...</distributionManagement> 
    </profile> 
  </profiles> 
Activation 触发这个profile的条件配置如下例:(只需要其中一个成立就可以激活profile,如果第一个条件满足了,那么后面就不会在进行匹配。 
    <profile> 
      <id>test</id> 
      <activation> 
        <activeByDefault>false</activeByDefault> 
        <jdk>1.5</jdk> 
        <os> 
          <name>Windows XP</name> 
          <family>Windows</family> 
          <arch>x86</arch> 
          <version>5.1.2600</version> 
        </os> 
        <file> 
          <exists>${basedir}/file2.properties</exists> 
          <missing>${basedir}/file1.properties</missing> 
        </file> 
      </activation> 

1
0
分享到:
评论
2 楼 seandeng888 2014-09-14  
linginfanta 写道
推荐 gradle 好牛逼的说。秘鲁玛卡

楼上说的对。相比之下,gradle可是强多了。
1 楼 linginfanta 2014-09-14  
推荐 gradle 好牛逼的说。秘鲁玛卡

相关推荐

    Maven是基于项目对象模型(POM)

    Maven是Java世界中广泛使用的项目管理和综合工具,其核心概念是项目对象模型(Project Object Model,简称POM)。POM是Maven的核心组件,它是一个XML格式的配置文件,包含了项目的基本信息,如项目名称、版本、依赖...

    项目管理工具Maven工具教程.CHM

    极客出品——项目管理工具Maven 工具教程。 Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一个中央信息管理 模块,Maven 能够管理项目的构建、报告和文档。‌

    史上最全的maven的pom.xml文件详解

    史上最全的Maven的Pom.xml文件详解 Maven是Java领域最流行的构建工具之一,其核心配置文件是Pom.xml。在Pom.xml文件中,我们...Maven的强大之处在于它可以自动管理项目的依赖关系,从而提高项目的可维护性和可扩展性。

    maven项目管理工具

    Maven,作为Apache软件基金会的一员,是一款强大的Java项目管理工具,旨在简化构建过程,管理和自动化项目生命周期。它的核心理念是通过一种标准的项目对象模型(Project Object Model,POM),统一项目的构建配置,...

    Maven build之pom.xml文件中的Build配置

    Maven是Apache软件基金会中的一个项目,它是一个项目管理工具,主要用于Java项目的构建、文档生成、报告和依赖管理。Maven通过一个叫做pom.xml的项目对象模型文件来配置项目构建的各个方面,其中标签是Maven构建配置...

    eclipse安装maven插件,处理无Maven Pom editor打开方式问题

    在IT行业中,Eclipse是一款广泛使用的Java集成开发环境(IDE),而Maven是Apache软件基金会开发的一款项目管理和综合工具,主要用于构建、管理和依赖管理。在Eclipse中安装Maven插件,可以方便开发者在IDE内进行...

    详解Maven POM(项目对象模型)

    Maven是一种项目管理和自动化构建的工具,它基于项目对象模型(POM)的概念来管理项目构建的生命周期。本文详细解析了Maven POM的概念、作用以及其在Maven项目中的重要性。 1. POM概念和作用 POM代表项目对象模型...

    maven项目管理工具包

    **正文** Maven是Java开发领域中广泛使用的项目管理和综合工具,它可以帮助开发者...这个"Maven项目管理工具包"中的Maven.3.3.9.包,正是这样一个最新版本的Maven安装包,供开发者下载使用,以便在项目开发中受益。

    一个软件项目管理和理解工具 基于 项目对象模型(POM)的概念,Maven可以管理项目的 从中心信息构建、报告和文档

    Maven,作为一个广泛使用的Java项目构建系统,其核心概念是项目对象模型(Project Object Model,简称POM)。POM是Maven的核心,它是一个XML文件,包含了项目的基本信息、依赖关系、构建过程、插件配置等关键元素。...

    maven中pom.xml基本配置

    在Java开发领域,Maven是一个不可或缺的项目管理工具,它通过使用一个名为pom.xml的配置文件来管理和构建项目。pom.xml文件是Maven项目的灵魂,它包含了项目的元数据,如项目信息、依赖关系、构建配置等。下面我们将...

    Maven 项目管理工具

    综上所述,Maven是一个功能强大的项目管理工具,通过POM、依赖管理、构建生命周期、插件系统和仓库管理等机制,为Java开发提供了标准化、自动化的工作流程。无论是小型项目还是大型企业级应用,Maven都能够帮助...

    Maven之pom.xml配置文件详解.pdf

    Maven是一个基于Java的项目管理和自动化构建工具,主要服务于基于Java平台的项目。它在软件开发过程中发挥着重要的作用,包括了项目对象模型(Project Object Model,POM)、依赖管理系统、生命周期、插件和目标等...

    Maven3.3.9项目对象模型(POM),可以通过一小段描述信息来管理

    Maven 是一个强大的 Java 项目管理工具,它的核心概念是项目对象模型(Project Object Model,简称 POM)。POM 是 Maven 中的一个重要概念,它是一个 XML 文件,包含了项目的配置信息,如依赖管理、构建过程、插件...

    Maven-项目管理工具软件详解

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...

    maven filemaven pom

    Maven是Java开发中的一款项目管理和综合工具,它通过一个名为`pom.xml`的项目对象模型(Project Object Model)文件来管理项目的构建、报告和依赖关系。`pom.xml`文件是Maven的核心,它是Maven理解项目配置、构建...

    项目管理-maven(一)

    Maven是一个流行的项目管理工具,用于帮助Java开发人员构建、发布和管理项目。它提供了一种标准化的方式来构建项目、管理依赖、运行测试、生成文档等,使得项目的构建过程更加自动化和规范化。 Maven基于项目对象...

    pom.zip_java maven_pom mainfest java_pom manifest 标签_pom 文件 mani

    在Java开发中,Maven是一个广泛使用的项目管理工具,它帮助开发者构建、管理和部署Java应用程序。Maven通过使用一个名为`pom.xml`的项目对象模型(Project Object Model)文件来定义项目的配置和依赖关系。在`pom....

Global site tag (gtag.js) - Google Analytics