文档章节

Maven pom 配置

z.net
 z.net
发布于 2013/06/04 13:51
字数 1248
阅读 157
收藏 4

什么是POM

Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

一个完整的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> 
  <!– The Basics –> 
  <groupId>…</groupId> 
  <artifactId>…</artifactId> 
  <version>…</version> 
  <packaging>…</packaging> 
  <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>

基本设置

maven的协作相关属性

<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> 
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>my-project</artifactId> 
  <version>1.0</version> 
  <packaging>war</packaging> 
</project>

  1. groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
  2. artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
  3. version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
  4. packaging : 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par
POM之间的关系

主要用于POM文件的复用。

依赖关系:依赖关系列表(dependency list)是POM的重要部分。

  <dependencies> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.0</version> 
      <scope>test</scope> 
    </dependency> 
    … 
  </dependencies>

  1. groupId , artifactId , version :
  2. scope : compile(default),provided,runtime,test,system
  3. exclusions

继承关系:继承其他pom.xml配置的机制。

比如父pom.xml:

<project> 
  [...] 
  <dependencies> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.4</version> 
      <scope>test</scope> 
    </dependency> 
  </dependencies> 
  [...] 
</project>

在子pom.xml文件继承它的依赖(还可以继承其他的:developers and contributors、plugin lists、reports lists、plugin executions with matching ids、plugin configuration):

[...] 
<parent> 
<groupId>com.devzuz.mvnbook.proficio</groupId> 
  <artifactId>proficio</artifactId> 
  <version>1.0-SNAPSHOT</version> 
</parent> 
[...]

在这种机制下,maven还提供了一个类似java.lang.Object的顶级父pom.xml文件:

<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>${project.artifactId}-${project.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> 
    <pluginManagement> 
       <plugins> 
         <plugin> 
           <artifactId>maven-antrun-plugin</artifactId> 
           <version>1.1</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.3</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.4</version> 
         </plugin> 
         <plugin> 
           <artifactId>maven-plugin-plugin</artifactId> 
           <version>2.4.1</version> 
         </plugin> 
         <plugin> 
           <artifactId>maven-rar-plugin</artifactId> 
           <version>2.2</version> 
         </plugin> 
         <plugin>                
           <artifactId>maven-release-plugin</artifactId> 
           <version>2.0-beta-7</version> 
         </plugin> 
         <plugin>                
           <artifactId>maven-resources-plugin</artifactId> 
           <version>2.2</version> 
         </plugin> 
         <plugin> 
           <artifactId>maven-site-plugin</artifactId> 
           <version>2.0-beta-6</version> 
         </plugin> 
         <plugin> 
           <artifactId>maven-source-plugin</artifactId> 
           <version>2.0.4</version> 
         </plugin>          
         <plugin> 
            <artifactId>maven-surefire-plugin</artifactId> 
            <version>2.4.2</version> 
         </plugin> 
         <plugin> 
           <artifactId>maven-war-plugin</artifactId> 
           <version>2.1-alpha-1</version> 
         </plugin> 
       </plugins> 
     </pluginManagement> 
  </build> 
  <reporting> 
    <outputDirectory>target/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.xml受到超pom.xml文件的影响:

mvn help:effective-pom

聚合关系:用于将多个maven项目聚合为一个大的项目。

<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> 
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>my-parent</artifactId> 
  <version>2.0</version> 
  <modules> 
    <module>my-project<module> 
  </modules> 
</project>

属性

maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。有以下分类:

  1. env.X:操作系统环境变量,比如${env.PATH}
  2. project.x:pom文件中的属性,比如:<project><version>1.0</version></project>,引用方式:${project.version}
  3. settings.x:settings.xml文件中的属性,比如:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
  4. Java System Properties:java.lang.System.getProperties()中的属性,比如java.home,引用方式:${java.home}
  5. 自定义:在pom文件中可以:<properties><installDir>c:/apps/cargo-installs</installDir></properties>,引用方式:${installDir}

构建设置

构建有两种build标签:

<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"> 
  … 
  <!– "Project Build" contains more elements than just the BaseBuild set –> 
  <build>…</build> 
  <profiles> 
    <profile> 
      <!– "Profile Build" contains a subset of "Project Build"s elements –> 
      <build>…</build> 
    </profile> 
  </profiles> 
</project>

build中的主要标签:Resources和Plugins。

Resources:用于排除或包含某些资源文件

    <resources> 
      <resource> 
        <targetPath>META-INF/plexus</targetPath> 
        <filtering>false</filtering> 
        <directory>${basedir}/src/main/plexus</directory> 
        <includes> 
          <include>configuration.xml</include> 
        </includes> 
        <excludes> 
          <exclude>**/*.properties</exclude> 
        </excludes> 
      </resource> 
    </resources>

Plugins:设置构建的插件

  <build> 
    … 
    <plugins> 
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-jar-plugin</artifactId> 
        <version>2.0</version> 
        <extensions>false</extensions> 
        <inherited>true</inherited> 
        <configuration> 
          <classifier>test</classifier> 
        </configuration> 
        <dependencies>…</dependencies> 
        <executions>…</executions> 
      </plugin>


本文转载自:http://marshal.easymorse.com/archives/511

z.net
粉丝 1
博文 98
码字总数 2607
作品 0
闵行
私信 提问
Maven项目管理工具参考知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaobryant/article/details/73609047 本笔记主要记录关于Maven知识体系的一些Pages和Tips! 一、Maven入门手...

adoryn
2017/06/22
0
0
Maven入门指南(一)

原文链接 译文链接 译者:nkcoder 校对:方腾飞 Maven介绍: Maven是一个强大的Java项目构建工具。当然,你也可以使用其它工具来构建项目,但由于Maven是用Java开发的,因此Maven被更多的用于...

GarfieldEr007
2018/01/14
0
0
Apache Maven --- [POM]

什么是POM 项目对象模型即POM是Maven的基本工作单元.它是一个包含了项目信息和Maven用来构建项目的配置详情的XML文件.对大多数项目来说它包含了默认值.例如默认的构建目录是target;默认的源码...

moonsnake777
2016/05/20
99
0
maven构建灵活性

Maven内置了三大特性:属性、Profile和资源过滤来支持构建的灵活性。 maven属性 事实上有六种类型的Maven属性: 内置属性:主要有两个常用内置属性——${basedir}表示项目根目录,即包含pom...

张欢19933
2016/12/23
25
0
maven如何修改本地仓库与中央仓库

什么是Maven仓库 在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立...

明舞
2014/07/07
4K
9

没有更多内容

加载失败,请刷新页面

加载更多

小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
26分钟前
2
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
28分钟前
2
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
36分钟前
4
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
42分钟前
5
0
第八讲:asp.net C# web 读取文件

本讲主要讲解如何在asp.net页面上传文件。 首先,前台页面: 其次,后台页面: 结果: 1、前台效果: 2、后台结果:

刘日辉
53分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部