Maven工程管理配置

最近经常使用Maven管理工程,于是总结一下使用过的Maven pom.xml配置。我本地使用的Maven版本是apache-maven-3.0.3。工程为普通java application打成jar包形式部署,web工程配置在后面也会做简要介绍。

一、基本配置

Xml代码   收藏代码
  1. <!-- pom.xml文件以project为根节点 -->  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"  
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  5.       
  6.     <!-- 声明pom.xml文件所支持的版本 -->  
  7.     <modelVersion>4.0.0</modelVersion>  
  8.     <!-- 全局性项目唯一标识,通常使用完全限定的包名来和其它项目区分 -->  
  9.     <groupId>front</groupId>  
  10.     <!-- 在给定的groupId内唯一的产品标识,也是输出的工程名 -->  
  11.     <artifactId>front</artifactId>  
  12.     <!-- 此项目输出的artifactId的当前版本 -->  
  13.     <version>1.0</version>  
  14.     <!-- 输出类型:jar、war、ear... -->  
  15.     <packaging>jar</packaging>  

二、构建配置

Xml代码   收藏代码
  1. <!-- 项目本地构建文件列表,可以改变文件构建过程 -->  
  2.     <profiles>  
  3.         <profile>  
  4.         <!-- 开发环境配置 -->  
  5.             <id>dev</id>  
  6.         <!-- 默认执行开发环境配置 -->  
  7.         <activation>  
  8.                 <activeByDefault>true</activeByDefault>  
  9.             </activation>  
  10.             <properties>  
  11.         <!-- 各属性配置,在配置文件中直接使用${}占位即可 -->  
  12.                 <log.level>TRACE</log.level>  
  13.             <!-- ... -->  
  14.             </properties>  
  15.         </profile>  
  16.         <profile>  
  17.         <!-- 线上环境配置 -->  
  18.             <id>prod</id>  
  19.             <properties>  
  20.                 <log.level>DEBUG</log.level>  
  21.                 <!-- ... -->  
  22.             </properties>  
  23.         </profile>  
  24.     </profiles>  
使用方法:mvn clean package -Pdev 或者 -Pprod (执行不同的构建配置)进行打包。

详情可以参见我的另一篇blog:

结合Commons Configuration和Maven进行工程配置管理 http://shensy.iteye.com/blog/1747408  

三、常量

Xml代码   收藏代码
  1. <!-- 定义一些常量,在项目其他地方可以使用 -->  
  2.     <properties>  
  3.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  4.     <!-- ... -->  
  5.     </properties>  

四、依赖管理

Xml代码   收藏代码
  1. <!-- 此项目所有的依赖列表 -->  
  2.   <dependencies>  
  3.     <dependency>  
  4.         <groupId>xxx</groupId>  
  5.         <artifactId>xxx</artifactId>  
  6.         <version>x.x.x</version>  
  7.         <scope>xx</scope>  
  8.     </dependency>  
  9.     <!-- ... -->  
  10.   </dependencies>  

五、<build></build>标签内元素

1、资源resources

Xml代码   收藏代码
  1. <!-- resource的列表,用于包括所有的资源 -->  
  2.         <resources>  
  3.             <resource>  
  4.         <!-- 资源所在的位置 -->  
  5.                 <directory>${project.basedir}/src/main/resources</directory>  
  6.         <!-- 是否替换资源中的属性placehold:${} -->  
  7.                 <filtering>true</filtering>  
  8.             </resource>  
  9.             <resource>  
  10.                 <directory>${project.basedir}/bin</directory>  
  11.                 <targetPath>${project.build.directory}/bin</targetPath>  
  12.                 <filtering>true</filtering>  
  13.             </resource>  
  14.         </resources>  

 2、插件plugins

Xml代码   收藏代码
  1. <plugins>  
  2.         <!-- 资源插件:用于资源文件管理 -->  
  3.             <plugin>  
  4.                 <groupId>org.apache.maven.plugins</groupId>  
  5.                 <artifactId>maven-resources-plugin</artifactId>  
  6.                 <version>2.5</version>  
  7.                 <configuration>  
  8.             <!-- 资源文件编码 -->  
  9.                     <encoding>${project.build.sourceEncoding}</encoding>  
  10.                 </configuration>  
  11.             </plugin>  

 

Xml代码   收藏代码
  1. <!-- 编译插件 -->  
  2.             <plugin>  
  3.                 <artifactId>maven-compiler-plugin</artifactId>  
  4.                 <version>2.3.2</version>  
  5.                 <configuration>  
  6.             <!-- 源代码jdk编译版本 -->  
  7.                     <source>1.6</source>  
  8.             <!-- 目标平台jdk编译版本 -->  
  9.                     <target>1.6</target>  
  10.             <!-- 字符集编码 -->  
  11.                     <encoding>UTF-8</encoding>  
  12.             <!--编译参数,详见javac命令,此处为控制是否执行注释处理和/或编译.-->  
  13.                     <compilerArgument>-proc:none</compilerArgument>  
  14.                 </configuration>  
  15.             </plugin>  

 

Xml代码   收藏代码
  1. <!-- 依赖管理 -->  
  2.             <plugin>  
  3.                 <groupId>org.apache.maven.plugins</groupId>  
  4.                 <artifactId>maven-dependency-plugin</artifactId>  
  5.                 <executions>  
  6.                     <execution>  
  7.                         <id>copy-dependencies</id>  
  8.                         <phase>package</phase>  
  9.                         <goals>  
  10.                 <!-- 将所有依赖的jar都拷贝出来 -->  
  11.                             <goal>copy-dependencies</goal>  
  12.                         </goals>  
  13.                         <configuration>  
  14.                           <outputDirectory>${project.build.directory}/lib</outputDirectory>  
  15.                           <overWriteReleases>false</overWriteReleases>  
  16.                           <overWriteSnapshots>false</overWriteSnapshots>  
  17.                           <overWriteIfNewer>true</overWriteIfNewer>  
  18.                         </configuration>  
  19.                     </execution>  
  20.                 </executions>  
  21.             </plugin>  

 

Xml代码   收藏代码
  1. <!-- jar打包管理 -->  
  2.             <plugin>  
  3.                 <groupId>org.apache.maven.plugins</groupId>  
  4.                 <artifactId>maven-jar-plugin</artifactId>  
  5.                 <configuration>  
  6.                     <archive>  
  7.                         <manifest>  
  8.                 <!-- 往Manifest.MF文件中添加ClassPath -->                        
  9.                             <addClasspath>true</addClasspath>  
  10.                 <!-- classpath前缀 -->  
  11.                             <classpathPrefix>lib/</classpathPrefix>  
  12.                 <!-- 主程序入口 -->  
  13.                             <mainClass>com.xxx.rest.Application</mainClass>  
  14.                         </manifest>  
  15.                     </archive>  
  16.                 </configuration>  
  17.             </plugin>  

 

Xml代码   收藏代码
  1. <!-- 自定义打包管理 -->  
  2. <plugin>  
  3.     <artifactId>maven-assembly-plugin</artifactId>  
  4.     <!-- 将maven-assembly-plugin继承到标准的maven打包过程中,  
  5.          在运行maven-package时就会执行maven-assembly-plugin的操作,  
  6.          从而实现我们需要的自定义打包. -->  
  7.     <executions>  
  8.         <execution>  
  9.             <id>distro-assembly</id>  
  10.             <phase>verify</phase>  
  11.             <goals>  
  12.                 <goal>single</goal>  
  13.             </goals>  
  14.             <configuration>  
  15.             <!-- 指定maven-assembly-plugin的配置文件 -->  
  16.                 <descriptors>  
  17.                     <descriptor>src/main/assembly/assembly.xml</descriptor>  
  18.                 </descriptors>  
  19.             </configuration>  
  20.         </execution>  
  21.      </executions>  
  22. </plugin>  

 

Xml代码   收藏代码
  1. <!-- 测试插件 -->  
  2.             <plugin>  
  3.                 <groupId>org.apache.maven.plugins</groupId>  
  4.                 <artifactId>maven-surefire-plugin</artifactId>  
  5.                 <version>2.5</version>  
  6.                 <configuration>  
  7.                     <includes>  
  8.                         <include>**/*Tests.java</include>  
  9.                     </includes>  
  10.                 </configuration>  
  11.             </plugin>  

 

Xml代码   收藏代码
  1. <!-- 测试覆盖率插件 -->  
  2.             <plugin>  
  3.                 <groupId>org.codehaus.mojo</groupId>  
  4.                 <artifactId>cobertura-maven-plugin</artifactId>  
  5.                 <version>2.5.1</version>  
  6.                 <configuration>  
  7.                     <formats>  
  8.                         <format>xml</format>  
  9.                     </formats>  
  10.                     <check></check>  
  11.                 </configuration>  
  12.                 <executions>  
  13.                     <execution>  
  14.                         <phase>package</phase>  
  15.                         <goals>  
  16.                             <goal>cobertura</goal>  
  17.                         </goals>  
  18.                     </execution>  
  19.                 </executions>  
  20.             </plugin>  
  21.         </plugins>  

 

Xml代码   收藏代码
  1. <!-- 源码包:当使用一个第三方依赖的时候,有时候会希望在IDE中直接进入该依赖的源码查看其实现的细节,如果该依赖将源码包发布到了Maven仓库,那么像Eclipse就能通过m2eclipse插件解析下载源码包并关联到你的项目中,十分方便. -->  
  2. <plugin>  
  3.     <groupId>org.apache.maven.plugins</groupId>  
  4.     <artifactId>maven-source-plugin</artifactId>  
  5.     <version>2.1.2</version>  
  6.     <executions>  
  7.       <execution>  
  8.         <id>attach-sources</id>  
  9.         <phase>verify</phase>  
  10.         <goals>  
  11.           <goal>jar-no-fork</goal>  
  12.         </goals>  
  13.       </execution>  
  14.     </executions>  
  15. </plugin>  

生成Javadoc包:

Xml代码   收藏代码
  1. <plugin>  
  2.     <groupId>org.apache.maven.plugins</groupId>  
  3.     <artifactId>maven-javadoc-plugin</artifactId>  
  4.     <version>2.7</version>  
  5.     <executions>  
  6.       <execution>  
  7.         <id>attach-javadocs</id>  
  8.           <goals>  
  9.             <goal>jar</goal>  
  10.           </goals>  
  11.       </execution>  
  12.     </executions>  
  13. </plugin>  

3、finalname

Xml代码   收藏代码
  1. <finalName>front</finalName>  

4、关于自定义打包管理插件maven-assembly-plugin:

将maven-assembly-plugin继承到标准的maven打包过程中,在运行maven-package时就会执行maven-assembly-plugin的操作,从而实现我们需要的自定义打包.上文中将maven-assembly-plugin插件配置文件位置定义在

Xml代码   收藏代码
  1. src/main/assembly/assembly.xml  

中,assembly.xml详细配置如下:

基本配置:

Xml代码   收藏代码
  1. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"  
  2.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.         xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">  
  4.     <id>dist</id>  
  5.     <!-- 打包的最终格式 -->  
  6.     <formats>  
  7.         <format>zip</format>  
  8.     </formats>  
  9.     <includeBaseDirectory>true</includeBaseDirectory>  

filesets配置:

Xml代码   收藏代码
  1. <fileSets>  
  2.         <fileSet>  
  3.         <!-- ${project.build.directory}/lib打到lib下 -->  
  4.             <directory>${project.build.directory}/lib</directory>  
  5.             <outputDirectory>lib</outputDirectory>  
  6.             <includes>  
  7.                 <include>**/**</include>  
  8.             </includes>  
  9.         </fileSet>  
  10.         <fileSet>  
  11.         <!-- ${project.build.directory}下的jar打到当前路径下,不包含*-sources.jar -->  
  12.             <directory>${project.build.directory}</directory>  
  13.             <outputDirectory>.</outputDirectory>  
  14.             <includes>  
  15.                 <include>*.jar</include>  
  16.             </includes>  
  17.             <excludes>  
  18.                 <exclude>*-sources.jar</exclude>  
  19.             </excludes>  
  20.         </fileSet>  
  21.         <fileSet>  
  22.         <!-- bin下的sh文件打到bin路径下 -->  
  23.             <directory>${project.build.directory}/bin</directory>  
  24.             <outputDirectory>bin</outputDirectory>  
  25.             <includes>  
  26.                 <include>*.sh</include>  
  27.             </includes>  
  28.         <!-- 最大文件权限 -->  
  29.             <fileMode>0777</fileMode>  
  30.         <!-- unix结束符 -->  
  31.             <lineEnding>unix</lineEnding>  
  32.         </fileSet>  
  33.         <fileSet>  
  34.         <!-- classes下的*.properties,*.xml文件打到conf路径下 -->  
  35.             <directory>${project.build.directory}/classes</directory>  
  36.             <outputDirectory>conf</outputDirectory>  
  37.             <includes>  
  38.                 <include>*.properties</include>  
  39.                 <include>*.xml</include>  
  40.             </includes>  
  41.         <!-- unix结束符 -->  
  42.             <lineEnding>unix</lineEnding>  
  43.         </fileSet>  
  44. </fileSets>  

使用maven-assembly-plugin打包完成后,target路径下回生成一个zip文件,然后就可以直接将zip包上传并解压缩直接部署了。

六、关于web工程[以下节选自网络]:

web配置与jar不同,默认配置package为war。如果需要自定义配置,需要修改插件配置。

任何一个Maven项目都需要定义POM元素packaging(如果不写则默认值为jar)。

该元素决定了项目的打包方式。实际的情形中,如果你不声明该元素,Maven会帮你生成一个JAR包;如果你定义该元素的值为war,那你会得到一个WAR包;如果定义其值为POM(比如是一个父模块),那什么包都不会生成。

Maven为jar项目调用了maven-jar-plugin,为war项目调用了maven-war-plugin,换言之,packaging直接影响Maven的构建生命周期。了解这一点非常重要,特别是当你需要自定义打包行为的时候,你就必须知道去配置哪个插件。

一个常见的例子就是在打包war项目的时候排除某些web资源文件,这时就应该配置maven-war-plugin:

Xml代码   收藏代码
  1. <plugin>  
  2.     <groupId>org.apache.maven.plugins</groupId>  
  3.     <artifactId>maven-war-plugin</artifactId>  
  4.     <version>2.1.1</version>  
  5.     <configuration>  
  6.       <webResources>  
  7.         <resource>  
  8.           <directory>src/main/webapp</directory>  
  9.           <excludes>  
  10.             <exclude>**/*.jpg</exclude>  
  11.           </excludes>  
  12.         </resource>  
  13.       </webResources>  
  14.     </configuration>  
  15. </plugin>  

 

 

参考资料:

http://maven.apache.org/guides/getting-started/index.html Maven Getting Started Guide 

http://maven.apache.org/plugins/index.html  Maven官方常用插件一栏

http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin Maven实战系列(七)——常用Maven插件介绍

http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package Maven实战(九)——打包的技巧

http://www.iteye.com/topic/1127097 深入浅出Maven:创建普通及Web项目、使用Profile进行资源过滤

http://snowolf.iteye.com/blog/953735 

http://www.blogjava.net/aoxj/archive/2009/01/16/251615.html 

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值