《Maven官方文档》POM文件(一)

什么是POM?

POM(project object model)包含了工程信息和工程的配置细节,Maven使用POM文件来构建工程。POM文件包含了工程中的大部分默认值。举个例子,target是默认的构建目录,src/main/java是默认的源码目录,src/test/java是默认的测试源码目录,等等。

Maven2中的pom.xml就是Maven1中的project.xml。相比于在maven.xml中包含可执行的goal,现在goals和plugins都可以在pom.xml中配置。当执行一个task或者goal时,Maven会在当前目录下寻找并读取pom.xml来获取配置信息,然后执行goal。

能在pom.xml中声明的配置包括工程依赖(project dependencies),插件(plugins),可执行的目标(goals),构建配置(build profiles)等等。其他信息,比如工程版本,描述,开发者,邮件列表等等也可以在pox.xml中声明。

Super POM

Super POM是Maven的默认POM文件,除非你显示的声明继承关系,否则所有的POM文件都是在Super POM的基础上的扩展,也就是说,Super POM中的的配置会被你的工程中创建的pom.xml继承。Maven 2.0.x中的Super POM代码如下:

<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>${artifactId}-${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>

  <profiles>
    <profile>
      <id>release-profile</id>

      <activation>
        <property>
          <name>performRelease</name>
        </property>
      </activation>

      <build>
        <plugins>
          <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>

            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>

            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>

            <configuration>
              <updateReleaseInfo>true</updateReleaseInfo>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>

下面是Maven 2.1.x的Super POM:

<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>${project.basedir}/target</directory>
    <outputDirectory>${project.build.directory}/classes</outputDirectory>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
    <!-- TODO: MNG-3731 maven-plugin-tools-api < 2.4.4 expect this to be relative... -->
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
    <resources>
      <resource>
        <directory>${project.basedir}/src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>${project.basedir}/src/test/resources</directory>
      </testResource>
    </testResources>
   <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>
  </build>

  <reporting>
    <outputDirectory>${project.build.directory}/site</outputDirectory>
  </reporting>
  <profiles>
    <profile>
      <id>release-profile</id>

      <activation>
        <property>
          <name>performRelease</name>
          <value>true</value>
        </property>
      </activation>

      <build>
        <plugins>
          <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
              <updateReleaseInfo>true</updateReleaseInfo>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>

最小化POM

一个最小化的POM文件的要求如下:

  • project 标签作为顶层标签
  • modelVersion – 应该设为4.0.0
  • groupId – 工程开发组的唯一id
  • artifactId – 工件(artifact)或工程(projrct)的唯一id
  • version – 版本号

这里是一个最小化POM的例子:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>

在POM文件中需要声明 groupId ,  artifactId 和 version 。这三个值以<groupId>:<artifactId>:<version>的形式声明,它们组成了工程的完整名称。比如上面的例子,完整名称为”com.mycompany.app:my-app1″。

如第一节所说,如果配置细节没有显示的设置,Maven将会使用继承自Super POM默认配置。其中一个默认值就是包的类型(packaging type),每个Maven工程都有一个包类型,如果没有在POM中设置,则默认为”jar”。

前面的Minimal POM中,其中 repositories 这个值没有设置,如果你使用minimal POM来构建你的工程,它将使用继承Super POM中的 repositories 值(http://repo.maven.apache.org/maven2),当Maven在POM中找到依赖,它就会去这个地址下载依赖包。

转载自 并发编程网 - ifeve.com

时间: 2024-10-28 01:12:39

《Maven官方文档》POM文件(一)的相关文章

《Maven官方文档》POM文件(二)

工程继承 POM中可配置的元素如下: 依赖 (dependencies) 开发者和贡献者 (developers and contributors) 插件列表,包括报告 (plugin lists, including reports) 相应id的插件执行 (plugin executions with matching ids) 插件配置 (plugin configuration) 资源 (resources) Super POM就是一个工程继承的例子.你也可以通过在POM中指定parent

《Maven官方文档》创建Archetype

创建archetype是一个非常简单的过程.archetype就是一个非常简单的构件,它包含了你想创建的工程的模型.archetype由这些东西组成: 一个archetype描述符(archetype descriptor)(src/main/resources/META-INF/maven目录下的archetype.xml).这个文件列出了包含在archetype中的所有文件并将这些文件分类,因此archetype生成机制才能正确的处理. 原型文件(prototype files),arche

《Maven官方文档》创建Archetype 原文链接

创建archetype是一个非常简单的过程.archetype就是一个非常简单的构件,它包含了你想创建的工程的模型.archetype由这些东西组成: 一个archetype描述符(archetype descriptor)(src/main/resources/META-INF/maven目录下的archetype.xml).这个文件列出了包含在archetype中的所有文件并将这些文件分类,因此archetype生成机制才能正确的处理. 原型文件(prototype files),arche

《Maven官方文档》-Maven依赖机制简介(一)

依赖机制是Maven最为用户熟知的特性之一,同时也是Maven所擅长的领域之一.单个项目的依赖管理并不难, 但是当你面对包含数百个模块的多模块项目和应用时,Maven能帮你保证项目的高度控制力和稳定性. 大纲:  传递性依赖 排除.可选依赖 依赖范围 依赖管理 导入依赖 系统依赖 传递性依赖 传递性依赖是Maven2.0的新特性.假设你的项目依赖于一个库,而这个库又依赖于其他库.你不必自己去找出所有这些依赖,你只需要加上你直接依赖的库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中.这

《Maven官方文档》-Maven依赖机制简介(二)

项目B: <project> <modelVersion>4.0.0</modelVersion> <groupId>maven</groupId> <artifactId>B</artifactId> <packaging>pom</packaging> <name>B</name> <version>1.0</version> <depend

《maven官方文档》5分钟开始Maven

前提 你必须明白如何在电脑上安装软件.如果你不知道如何做,请向你学校.办公室里等的人请教下,或者付费给他人让他们解释给你.Maven邮件组不是寻求这个建议的最好地方. 安装 Maven是个Java工具,所以你必须安装了Java才能继续.首先,下载Maven,然后按照安装指南.完成后,在终端或命令行中键入如下指令: mvn --version 应该会打印已安装Maven的版本.例如: Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf96

《Maven官方文档》插件的发展

来讲解一下Maven 2.0 插件的发展       maven中有一个核心引擎,它提供了基础项目的处理能力和构建能力的管理,还有很多用于构建任务的插件. 那到底什么是插件呢? Maven 核心框架就是一个插件的集合.换而言之,这些插件就是行为的执行者,插件可以用于:创建jar文件,war文件,编译代码,单元测试,创建项目文档等等.几乎任何的行为,你都可以认为是这个项目在执行对应的Maven插件. 插件是Maven的核心特性并可以给多个项目重复使用.插件执行的这些行为包含在一个项目描述--项目对

《Maven官方文档》什么是原型(Archrtype)?

什么是原型? 简单来说,原型(Archetype)是一个Maven工程模板工具包.一个原型被定义为一个提供相同性质内容的原始样式或模型.这个名字适合当我们试图提供一个系统,这个系统提供了一个一致的方式生成Maven项目.原型将帮助作者为用户创建Maven工程模板,并且为用户提供方法去使用参数来调整生成的工程模板. 使用原型提供了一个很好的方式,使开发人员快速的符合你的项目或组织的最佳实践,在Maven项目中,我们提供了一个演示了Maven多种特性的示例工程,以此希望帮助我们的用户尽快的启动并运行

《Apache Velocity用户指南》官方文档

Quick Start 本项目是 Apache Velocity官方文档的中文翻译版,Velocity类似与JSP,是一种基于Java的模板引擎.它可以在web页面中引用Java代码中定义的数据和对象,而Velocity的作用就是把Web视图和java代码进行组装在一起.本次翻译主要针对对Velocity感兴趣和工作中使用到Velocity的开发人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助. 由于我也是第一次接触Velocity,还不是很深入,翻译的时候也查看了一些博客以及其他网