maven之pom.xml配置详解

setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。


基础配置

一个典型的pom.xml文件配置如下:

[html]  view plain  copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.   
  4.       
  5.     <modelVersion>4.0.0modelVersion>  
  6.   
  7.       
  8.     <groupId>com.winner.tradegroupId>  
  9.   
  10.       
  11.     <artifactId>trade-coreartifactId>  
  12.   
  13.       
  14.     <version>1.0.0-SNAPSHOTversion>  
  15.   
  16.       
  17.     <packaging>jarpackaging>  
  18.   
  19.       
  20.     <classifier>...classifier>  
  21.   
  22.       
  23.     <dependencies>  
  24.   
  25.           
  26.         <dependency>  
  27.   
  28.                
  29.               
  30.             <groupId>com.winner.tradegroupId>  
  31.             <artifactId>trade-testartifactId>  
  32.             <version>1.0.0-SNAPSHOTversion>  
  33.   
  34.               
  35.               
  36.             <scope>testscope>  
  37.   
  38.               
  39.             <optional>falseoptional>  
  40.   
  41.               
  42.             <exclusions>  
  43.                 <exclusion>  
  44.                     <groupId>org.slf4jgroupId>  
  45.                     <artifactId>slf4j-apiartifactId>  
  46.                 exclusion>  
  47.             exclusions>  
  48.   
  49.         dependency>  
  50.   
  51.     dependencies>  
  52.   
  53.       
  54.     <properties>  
  55.         <file.encoding>UTF-8file.encoding>  
  56.         <java.source.version>1.5java.source.version>  
  57.         <java.target.version>1.5java.target.version>  
  58.     properties>  
  59.   
  60.     ...  
  61. project>  

一般来说,上面的几个配置项对任何项目都是必不可少的,定义了项目的基本属性。

这里有必要对一个不太常用的属性classifier做一下解释,因为有时候引用某个jar包,classifier不写的话会报错。

classifier元素用来帮助定义构件输出的一些附属构件。附属构件与主构件对应,比如主构件是 kimi-app-2.0.0.jar,该项目可能还会通过使用一些插件生成 如kimi-app-2.0.0-javadoc.jar (Java文档)、 kimi-app-2.0.0-sources.jar(Java源代码) 这样两个附属构件。这时候,javadoc、sources就是这两个附属构件的classifier,这样附属构件也就拥有了自己唯一的坐标。

classifier的用途在于:

1. maven download  javadoc / sources jar包的时候,需要借助classifier指明要下载那个附属构件

2. 引入依赖的时候,有时候仅凭groupId、artifactId、version无法唯一的确定某个构件,需要借助classifier来进一步明确目标。比如JSON-lib,有时候会同一个版本会提供多个jar包,在JDK1.5环境下是一套,在JDK1.3环境下是一套:


引用它的时候就要注明JDK版本,否则maven不知道你到底需要哪一套jar包:

[html]  view plain  copy
  1. <dependency>  
  2.            <groupId>net.sf.json-libgroupId>  
  3.            <artifactId>json-libartifactId>  
  4.             <version>2.4version>  
  5.            <classifier>jdk15classifier>  
  6. dependency>  

 

构建配置

[html]  view plain  copy
  1. <build>  
  2.   
  3.       
  4.     <finalName>myPorjectNamefinalName>  
  5.   
  6.       
  7.     <directory>${basedir}/targetdirectory>  
  8.   
  9.       
  10.       
  11.     <defaultGoal>installdefaultGoal>  
  12.   
  13.       
  14.       
  15.     <filters>  
  16.         <filter>../filter.propertiesfilter>  
  17.     filters>  
  18.   
  19.       
  20.     <resources>  
  21.         <resource>  
  22.   
  23.               
  24.               
  25.               
  26.             <targetPath>resourcestargetPath>  
  27.   
  28.               
  29.             <filtering>truefiltering>  
  30.   
  31.               
  32.             <directory>src/main/resourcesdirectory>  
  33.   
  34.               
  35.             <includes>  
  36.                 <include>**/*.propertiesinclude>  
  37.                 <include>**/*.xmlinclude>  
  38.             includes>  
  39.   
  40.               
  41.             <excludes>  
  42.                 <exclude>jdbc.propertiesexclude>  
  43.             excludes>  
  44.   
  45.         resource>  
  46.     resources>  
  47.   
  48.       
  49.     <testResources>  
  50.         <testResource>  
  51.             <targetPath />  
  52.             <filtering />  
  53.             <directory />  
  54.             <includes />  
  55.             <excludes />  
  56.         testResource>  
  57.     testResources>  
  58.   
  59.       
  60.     <sourceDirectory>${basedir}\src\main\javasourceDirectory>  
  61.   
  62.       
  63.     <scriptSourceDirectory>${basedir}\src\main\scripts  
  64.     scriptSourceDirectory>  
  65.   
  66.       
  67.     <testSourceDirectory>${basedir}\src\test\javatestSourceDirectory>  
  68.   
  69.       
  70.     <outputDirectory>${basedir}\target\classesoutputDirectory>  
  71.   
  72.       
  73.     <testOutputDirectory>${basedir}\target\test-classes  
  74.     testOutputDirectory>  
  75.   
  76.       
  77.       
  78.       
  79.     <extensions>  
  80.   
  81.           
  82.           
  83.           
  84.           
  85.           
  86.         <extension>  
  87.             <groupId>org.apache.maven.wagongroupId>  
  88.             <artifactId>wagon-sshartifactId>  
  89.             <version>2.8version>  
  90.         extension>  
  91.   
  92.     extensions>  
  93.   
  94.       
  95.     <plugins>  
  96.         <plugin>  
  97.             <groupId>groupId>  
  98.             <artifactId>maven-assembly-pluginartifactId>  
  99.             <version>2.5.5version>  
  100.   
  101.               
  102.             <executions>  
  103.                 <execution>  
  104.   
  105.                       
  106.                     <id>assemblyid>  
  107.   
  108.                       
  109.                     <phase>packagephase>  
  110.   
  111.                       
  112.                     <goals>  
  113.                         <goal>singlegoal>  
  114.                     goals>  
  115.   
  116.                       
  117.                     <inherited>falseinherited>  
  118.   
  119.                 execution>  
  120.             executions>  
  121.   
  122.               
  123.             <configuration>  
  124.                 <finalName>${finalName}finalName>  
  125.                 <appendAssemblyId>falseappendAssemblyId>  
  126.                 <descriptor>assembly.xmldescriptor>  
  127.             configuration>  
  128.   
  129.               
  130.               
  131.             <extensions>falseextensions>  
  132.   
  133.               
  134.             <dependencies>  
  135.                 <dependency>...dependency>  
  136.             dependencies>  
  137.   
  138.               
  139.             <inherited>trueinherited>  
  140.   
  141.         plugin>  
  142.     plugins>  
  143.   
  144.       
  145.       
  146.       
  147.     <pluginManagement>  
  148.         <plugins>...plugins>  
  149.     pluginManagement>  
  150.   
  151. build>  

pom里面的仓库与setting.xml里的仓库功能是一样的。主要的区别在于,pom里的仓库是个性化的。比如一家大公司里的setting文件是公用的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要在pom里设置自己需要的仓库地址。


分发配置

[html]  view plain  copy
  1.   
  2.   
  3. <distributionManagement>  
  4.   
  5.       
  6.     <repository>  
  7.   
  8.           
  9.           
  10.         <uniqueVersion>trueuniqueVersion>  
  11.   
  12.         <id> repo-id id>  
  13.         <name> repo-namename>  
  14.         <url>file://${basedir}/target/deploy url>  
  15.         <layout />  
  16.   
  17.     repository>  
  18.   
  19.       
  20.     <snapshotRepository>  
  21.         <uniqueVersion />  
  22.         <id />  
  23.         <name />  
  24.         <url />  
  25.         <layout />  
  26.     snapshotRepository>  
  27.   
  28.       
  29.     <site>  
  30.   
  31.           
  32.         <id> site-id id>  
  33.   
  34.           
  35.         <name> site-namename>  
  36.   
  37.           
  38.         <url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web url>  
  39.   
  40.     site>  
  41.   
  42.       
  43.       
  44.     <downloadUrl />  
  45.   
  46.       
  47.     <relocation>  
  48.   
  49.           
  50.         <groupId />  
  51.   
  52.           
  53.         <artifactId />  
  54.   
  55.           
  56.         <version />  
  57.   
  58.           
  59.         <message />  
  60.   
  61.     relocation>  
  62.   
  63.       
  64.       
  65.       
  66.     <status />  
  67.   
  68. distributionManagement>  

仓库配置

[html]  view plain  copy
  1.   
  2. <repositories>  
  3.   
  4.       
  5.     <repository>  
  6.   
  7.           
  8.         <releases>  
  9.   
  10.               
  11.             <enabled />  
  12.   
  13.               
  14.        &nb

你可能感兴趣的:(Java)