`
我是老威
  • 浏览: 26410 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Maven的pom.xml文件详解------Build Settings

阅读更多

根据POM 4.0.0 XSD,build元素概念性的划分为两个部分:BaseBuild(包含poject build和profile build的公共部分,见下)和poject build包含的一些高级特性。

[html] view plain copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"  
  2.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
  4.                         http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  5.     ...  
  6.     <!-- "Project Build" contains more elements than just the BaseBuild set -->  
  7.     <build>...</build>  
  8.   
  9.   
  10.     <profiles>  
  11.         <profile>  
  12.             <!-- "Profile Build" contains a subset of "Project Build"s elements -->  
  13.             <build>...</build>  
  14.         </profile>  
  15.     </profiles>  
  16. </project>  

BaseBuild元素集合

basic elements

[html] view plain copy
  1. <build>  
  2.     <defaultGoal>install</defaultGoal>  
  3.     <directory>${basedir}/target</directory>  
  4.     <finalName>${artifactId}-${version}</finalName>  
  5.     <filters>  
  6.         <filter>filters/filter1.properties</filter>  
  7.     </filters>  
  8.     ...  
  9. </build>  

1、defaultGoal:执行build任务时,如果没有指定目标,将使用的默认值,如:在命令行中执行mvn,则相当于执行mvn install;
2、directory:build目标文件的存放目录,默认在${basedir}/target目录;
3、finalName:build目标文件的文件名,默认情况下为${artifactId}-${version};
4、filter:定义*.properties文件,包含一个properties列表,该列表会应用的支持filter的resources中。也就是说,定义在filter的文件中的"name=value"值对会在build时代替${name}值应用到resources中。Maven的默认filter文件夹是${basedir}/src/main/filters/。

resources

build的另一个特征是指定你的项目中resources的位置。resources(通常)不是代码,他们不被编译,但是被绑定在你的项目或者用于其它什么原因,例如代码生成。

[html] view plain copy
  1. <build>  
  2.     ...  
  3.     <resources>  
  4.          <resource>  
  5.             <targetPath>META-INF/plexus</targetPath>  
  6.             <filtering>false</filtering>  
  7.             <directory>${basedir}/src/main/plexus</directory>  
  8.             <includes>  
  9.                 <include>configuration.xml</include>  
  10.             </includes>  
  11.             <excludes>  
  12.                 <exclude>**/*.properties</exclude>  
  13.             </excludes>  
  14.          </resource>  
  15.     </resources>  
  16.     <testResources>  
  17.         ...  
  18.     </testResources>  
  19.     ...  
  20. </build>  

1、resources:一个resource元素的列表,每一个都描述与项目关联的文件是什么和在哪里;
2、targetPath:指定build后的resource存放的文件夹。该路径默认是basedir。通常被打包在JAR中的resources的目标路径为META-INF;
3、filtering:true/false,表示为这个resource,filter是否激活。
4、directory:定义resource所在的文件夹,默认为${basedir}/src/main/resources;
5、includes:指定作为resource的文件的匹配模式,用*作为通配符;
6、excludes:指定哪些文件被忽略,如果一个文件同时符合includes和excludes,则excludes生效;
7、testResources:定义和resource类似,但只在test时使用,默认的test resource文件夹路径是${basedir}/src/test/resources,test resource不被部署。

Plugins

[html] view plain copy
  1. <build>  
  2.     ...  
  3.     <plugins>  
  4.         <plugin>  
  5.             <groupId>org.apache.maven.plugins</groupId>  
  6.             <artifactId>maven-jar-plugin</artifactId>  
  7.             <version>2.0</version>  
  8.             <extensions>false</extensions>  
  9.             <inherited>true</inherited>  
  10.             <configuration>  
  11.                 <classifier>test</classifier>  
  12.             </configuration>  
  13.             <dependencies>...</dependencies>  
  14.             <executions>...</executions>  
  15.         </plugin>  
  16.     </plugins>  
  17. </build>  

除了groupId:artifactId:version标准坐标,plugin还需要如下属性:
1、extensions:true/false,是否加载plugin的extensions,默认为false;
2、inherited:true/false,这个plugin是否应用到该POM的孩子POM,默认true;
3、configuration:配置该plugin期望得到的properies,如上面的例子,我们为maven-jar-plugin的Mojo设置了classifier属性;

如果你的POM有一个parent,它可以从parent的build/plugins或者pluginManagement集成plugin配置。

为了阐述继承后的关系,考虑如果parent POM中存在如下plugin:

[html] view plain copy
  1. <plugin>  
  2.     <groupId>my.group</groupId>  
  3.     <artifactId>my-plugin</artifactId>  
  4.     <configuration>  
  5.         <items>  
  6.             <item>parent-1</item>  
  7.             <item>parent-2</item>  
  8.         </items>  
  9.         <properties>  
  10.             <parentKey>parent</parentKey>  
  11.         </properties>  
  12.     </configuration>  
  13. </plugin>  

然后在继承的孩子POM中做如下配置:

[html] view plain copy
  1. <pre name="code" class="html"><plugin>  
  2.     <groupId>my.group</groupId>  
  3.     <artifactId>my-plugin</artifactId>  
  4.     <configuration>  
  5.         <items>  
  6.             <item>child-1</item>  
  7.         </items>  
  8.         <properties>  
  9.             <childKey>child</childKey>  
  10.         </properties>  
  11.     </configuration>  
  12. </plugin></pre>  

这样孩子POM和parent POM中都存在groupId为my.group的plugin,Maven默认的行为将是根据属性名称将两个plugin的configuration的内容进行合并。如果孩子POM中有一个属性,则该属性是有效的,如果孩子POM中没有一个属性,但parent POM中存在,则parent中的属性是有效的。

根据这些规则,上面的例子在Maven中将得到:

[html] view plain copy
  1. <pre name="code" class="html"><plugin>  
  2.     <groupId>my.group</groupId>  
  3.     <artifactId>my-plugin</artifactId>  
  4.     <configuration>  
  5.         <items>  
  6.             <item>child-1</item>  
  7.         </items>  
  8.         <properties>  
  9.             <childKey>child</childKey>  
  10.             <parentKey>parent</parentKey>  
  11.         </properties>  
  12.     </configuration>  
  13. </plugin></pre>  

通过在configuration元素中增加combine.children和combine.self属性,孩子POM可以控制Maven怎么合并plugin的configuration。

假定这儿是孩子POM的configuration:

[html] view plain copy
  1. <pre name="code" class="html"><configuration>  
  2.     <items combine.children="append">  
  3.         <!-- combine.children="merge" is the default -->  
  4.         <item>child-1</item>  
  5.     </items>  
  6.     <properties combine.self="override">  
  7.         <!-- combine.self="merge" is the default -->  
  8.         <childKey>child</childKey>  
  9.     </properties>  
  10. </configuration></pre>  

则,现在合并后的效果如下:

[html] view plain copy
  1. <pre name="code" class="html"><configuration>  
  2.     <items combine.children="append">  
  3.         <item>parent-1</item>  
  4.         <item>parent-2</item>  
  5.         <item>child-1</item>  
  6.     </items>  
  7.     <properties combine.self="override">  
  8.         <childKey>child</childKey>  
  9.     </properties>  
  10. </configuration></pre>  

combine.children="append"表示父POM和子POM的属性合并起来;

combine.self="override"表示子POM的属性完全覆盖父POM的。

4、dependencies:同base build中的dependencies有同样的结构和功能,但这里是作为plugin的依赖,而不是项目的依赖。
5、executions:plugin可以有多个目标,每一个目标都可以有一个分开的配置,甚至可以绑定一个plugin的目标到一个不同的阶段。executions配置一个plugin的目标的execution。

假定一项绑定antrun:run目标到verify阶段,我们希望任务响应build文件夹,同时避免传递配置到他的孩子POM。你将得到一个execution:

[html] view plain copy
  1. <pre name="code" class="html"><build>  
  2.     <plugins>  
  3.         <plugin>  
  4.             <artifactId>maven-antrun-plugin</artifactId>  
  5.             <version>1.1</version>  
  6.             <executions>  
  7.                 <execution>  
  8.                     <id>echodir</id>  
  9.                     <goals>  
  10.                         <goal>run</goal>  
  11.                     </goals>  
  12.                     <phase>verify</phase>  
  13.                     <inherited>false</inherited>  
  14.                     <configuration>  
  15.                         <tasks>  
  16.                             <echo>Build Dir: ${project.build.directory}</echo>  
  17.                         </tasks>  
  18.                     </configuration>  
  19.                 </execution>  
  20.             </executions>  
  21.         </plugin>  
  22.     </plugins>  
  23. </build></pre>  

id:标识,用于和其他execution区分。当这个阶段执行时,它将以这个形式展示:[plugin:goal execution: id]。在这里为: [antrun:run execution: echodir];

goals:一个plugin的execution的目标列表;

phase:目标执行的阶段,具体值看Maven的生命周期列表;

inherited:是否继承;

configuration:在指定的目标下的配置。

Plugin Management

pluginManagement的元素的配置和plugins的配置是一样的,只是这里的配置只是用于集成,在孩子POM中指定使用。例如,在父POM中做如下配置:

[html] view plain copy
  1. <build>  
  2.     ...  
  3.     <pluginManagement>  
  4.         <plugins>  
  5.             <plugin>  
  6.               <groupId>org.apache.maven.plugins</groupId>  
  7.               <artifactId>maven-jar-plugin</artifactId>  
  8.               <version>2.2</version>  
  9.                 <executions>  
  10.                     <execution>  
  11.                         <id>pre-process-classes</id>  
  12.                         <phase>compile</phase>  
  13.                         <goals>  
  14.                             <goal>jar</goal>  
  15.                         </goals>  
  16.                         <configuration>  
  17.                             <classifier>pre-process</classifier>  
  18.                         </configuration>  
  19.                     </execution>  
  20.                 </executions>  
  21.             </plugin>  
  22.         </plugins>  
  23.     </pluginManagement>  
  24.     ...  
  25. </build>  

则在孩子POM中,我们只需要配置:

[html] view plain copy
  1. <build>  
  2.     ...  
  3.     <plugins>  
  4.         <plugin>  
  5.             <groupId>org.apache.maven.plugins</groupId>  
  6.             <artifactId>maven-jar-plugin</artifactId>  
  7.         </plugin>  
  8.     </plugins>  
  9.     ...  
  10. </build>  

这样就可以大大的简化孩子POM中的配置。

Reporting

Reporting包含的属性对应到site阶段(见Maven生命周期)。特定的Maven插件能产生定义和配置在reporting元素下的报告,例如:产生Javadoc报告。

[html] view plain copy
  1. <reporting>  
  2.     <outputDirectory>${basedir}/target/site</outputDirectory>  
  3.     <plugins>  
  4.         <plugin>  
  5.             <artifactId>maven-project-info-reports-plugin</artifactId>  
  6.             <version>2.0.1</version>  
  7.             <reportSets>  
  8.                 <reportSet></reportSet>  
  9.             </reportSets>  
  10.         </plugin>  
  11.     </plugins>  
  12. </reporting>  

对于reportSets:

[html] view plain copy
  1. <reportSets>  
  2.     <reportSet>  
  3.         <id>sunlink</id>  
  4.         <reports>  
  5.             <report>javadoc</report>  
  6.         </reports>  
  7.         <inherited>true</inherited>  
  8.         <configuration>  
  9.             <links>  
  10.                 <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>  
  11.             </links>  
  12.         </configuration>  
  13.     </reportSet>  
  14. </reportSets> 

 

转自:http://blog.csdn.net/tomato__/article/details/13625497

分享到:
评论

相关推荐

    Maven pom.xml与settings.xml详解

    在Maven的世界里,`pom.xml`和`settings.xml`是两个至关重要的配置文件,它们共同决定了Maven项目的构建过程和环境配置。`pom.xml`(Project Object Model)文件是每个Maven项目的核心,它包含了项目的基本信息、...

    最新maven3.1.1架包,eclipse集成maven插件,集成详细步骤

    6. **同步 Maven 立项文件(pom.xml)**: - 确保 Eclipse 与项目的 `pom.xml` 文件保持同步,以便自动导入依赖和配置。 通过以上步骤,Eclipse 将能够识别并处理 Maven 项目,使得开发者可以利用 Maven 的强大...

    Maven学习全教程.doc

    1. Maven基于POM.xml文件配置,Ant基于build.xml文件配置。 2. Maven提供了更多的自动化功能,例如依赖管理、生命周期管理等。 3. Ant更灵活,允许用户自定义更多的构建过程。 不同 Maven 仓库工具的比较 ---------...

    Maven各组件整合包.zip

    在Maven的settings.xml或pom.xml文件中,可以通过标签来配置这些插件,设定其执行的生命周期阶段、目标、参数等。例如,要配置maven-compiler-plugin进行编译,可以在pom.xml中添加以下配置: ```xml &lt;build&gt; ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Maven权威指南 Authors Tim O'Brien (Sonatype, Inc.) , John Casey (Sonatype, Inc.) , Brian Fox (Sonatype, Inc.) , Bruce Snyder () , Jason Van Zyl (Sonatype, Inc.) , Juven Xu () Abstract Maven权威指南...

    Maven安装及配置详解.pdf

    - 修改Maven安装目录下的`conf/settings.xml`文件,指定本地仓库的位置。 - 可以配置镜像加速器,如阿里云仓库,来提高下载速度。 ```xml &lt;id&gt;alimaven &lt;name&gt;aliyun maven &lt;url&gt;...

    Maven笔记.doc

    2. POM:pom.xml 是 Maven 的核心文件,是指示 Maven 如何工作的元数据文件,位于每个项目的根目录中; 3. GroupID:一个工程在全局环境中的唯一标识符,一般来说就是包名(域名,如 com.neusoft); 4. Artifact...

    Apache Maven 环境配置.pdf

    - Maven使用一个名为`settings.xml`的配置文件来管理各种设置,包括Maven仓库的位置、镜像服务器等。 - 默认情况下,`settings.xml`位于用户的主目录下的`.m2`目录中。 - 可以通过编辑该文件来自定义Maven的行为...

    Maven+配置文档.zip

    - **项目对象模型 (Project Object Model, POM)**:Maven基于POM来管理项目,它是一个XML文件,包含了项目的基本信息、依赖、构建目标等配置。 - **坐标 (Coordinates)**:每个Maven项目都有唯一的坐标,由groupId...

    maven 3.6.1文件下次及配置修改

    ** Maven 3.6.1 文件结构详解及配置修改指南** Maven 是一个强大的Java项目管理工具,它帮助开发者构建、管理和部署项目。Maven 3.6.1 是一个稳定版本,提供了许多改进和优化。理解其文件结构以及如何进行配置修改...

    基础阶段-Intellij IDEA 配置Maven.pdf

    1. **修改`settings.xml`文件**: 找到Maven安装目录下的 `conf/settings.xml` 文件。 2. **添加镜像配置**: ```xml &lt;id&gt;alimaven &lt;name&gt;aliyun maven &lt;url&gt;...

    Maven下载安装与配置详解.zip

    Maven的配置主要通过修改`~/.m2/settings.xml`(Linux/macOS)或`%USERPROFILE%\.m2\settings.xml`(Windows)文件进行。 1. **设置本地仓库**:在`&lt;localRepository&gt;`标签内指定Maven下载的依赖库保存位置,如`/...

    pom配置文件 maven_repository.rar

    《POM配置文件与Maven仓库的离线使用详解》 在软件开发中,Maven作为Java项目管理的重要工具,其依赖管理和构建功能为开发者带来了极大的便利。然而,在没有网络或者网络环境不稳定的情况下,依赖于远程Maven仓库...

    MyEclipse集成Maven.pdf

    在此处,需要配置Maven的安装位置,选择`Installations`,点击`ADD`按钮添加已安装的Maven实例,并指定用户设置文件(`%M2_HOME%\conf\settings.xml`)和本地仓库路径。 4. **M2_REPO Classpath变量** 在`Window -...

    Maven配置手册

    - 配置Eclipse的Maven设置,指向用户`settings.xml`文件。 2. **创建Maven Web项目**: - 使用Eclipse创建一个Maven Web项目,Maven会自动管理项目的结构和依赖。 3. **配置pom.xml**: - 在`pom.xml`中添加...

    Manven的安装和植入eclipse

    - **打开配置文件**: 打开 Maven 安装目录下的 conf 文件夹,找到 settings.xml 文件。 - **修改本地仓库路径**: - 在 `&lt;localRepository&gt;` 标签中修改路径为你自己选择的文件夹目录。 - 示例:`&lt;localRepository&gt;...

    maven环境搭建、MyEclipse配置maven项目

    Pom.xml 是 Maven 项目的核心配置文件,它定义了项目的依赖关系、编译和打包方式等。Pom.xml 文件主要包含以下元素: * project 元素:定义项目的基本信息 * groupId 元素:定义项目的组 ID * artifactId 元素:...

    Maven教学视频

    - **插件配置**:通过pom.xml文件中的`&lt;build&gt;`标签下的`&lt;plugins&gt;`进行配置。 #### 五、Maven多模块项目 - **多模块项目概念**:一个Maven项目可以包含多个子项目,每个子项目都是独立的Maven项目,具有自己的pom...

Global site tag (gtag.js) - Google Analytics