`

Maven pom文件常用配置小结(转)

 
阅读更多

什么是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>

分享到:
评论

相关推荐

    maven使用小结

    ### Maven使用小结 #### Maven简介 Maven是一款由Apache基金会提供的开源项目管理和构建工具,其设计理念基于项目对象模型(Project Object Model, POM)。通过一个中心信息片(即POM文件),Maven能够实现对项目...

    Maven实战最清楚版

    - **2.8 小结**:总结Maven的安装和配置过程及注意事项。 #### 3. Maven使用入门 - **3.1 编写POM**:介绍如何编写项目对象模型(Project Object Model),它是Maven的核心配置文件,定义了项目的构建规则和依赖关系...

    Maven实战2_maven_

    1. **POM(Project Object Model)**:Maven的中心概念是项目对象模型,它是项目配置信息的XML文件,包括项目的基本信息、依赖、构建目标等。POM使得项目可以在不同环境中保持一致性和可重复性。 2. **坐标...

    maven开发流程

    - `pom.xml`:Maven的核心配置文件,用于定义项目依赖、构建目标和其他元数据。 - `src/main/java`:存放主要的源代码。 - `src/main/resources`:存放资源文件,如配置文件、图片等。 - `src/test/java`:存放...

    maven 3.3.9

    1. **项目对象模型 (Project Object Model, POM)**:POM 是 Maven 项目的核心,它是一个XML文件,包含了项目的配置信息,如依赖、构建目标、构建过程等。 2. **依赖管理 (Dependency Management)**:Maven 自动管理...

    Maven Web项目部署到tomcat的方法总结

    小结 在这篇文章中,我们介绍了在Eclipse上Maven结构Web项目如何部署到Tomcat服务器的两种常用的方法。第一种方法是将项目打包成.war文件,然后将其拷贝到Tomcat的webapps文件夹下。第二种方法是配置自动部署插件,...

    Mvn常用命令总结

    ### Maven常用命令总结 Maven是一款非常流行的Java项目...### 小结 以上列举了Maven中最常用的命令及其应用场景,熟练掌握这些命令将极大地提高开发效率和项目构建质量。希望本文能够帮助大家更好地理解和使用Maven。

    springboot01

    3. **快速入门**: "003、SpringBoot3-快速入门-示例demo.mp4", "004、SpringBoot3-快速入门-demo小结.mp4" - 这些视频可能涵盖了创建第一个Spring Boot应用的过程,从创建项目到编写Hello World应用,以及对初步示例...

    在idea中创建SpringBoot项目

    小结 创建SpringBoot项目可以使用Spring Initializr和Maven两种方式,使用Spring Initializr可以快速创建项目,而使用Maven可以更加灵活地控制项目的配置。无论使用哪种方式,创建SpringBoot项目都是开发者常用的...

    JavaSpring2:通过Setter注入配置Spring Bean

    4. **构建文件**:如`pom.xml`,如果是Maven项目,这个文件定义了项目的依赖、构建规则等信息。 5. **README.md**:可能包含项目的简要说明和使用指南。 ### 小结 理解并熟练使用Spring的依赖注入,无论是setter...

    Spring-data-jpa 学习笔记.docx

    2. **添加依赖**:向项目的 `pom.xml` 文件中添加以下依赖项: - `spring-data-jpa` - Hibernate 相关依赖 - c3p0 数据源依赖 - MySQL 数据库驱动 ```xml &lt;groupId&gt;org.springframework.data &lt;artifactId&gt;...

Global site tag (gtag.js) - Google Analytics