• maven配置文件解析


    maven2配置文件主要分为settings.xml与pom.xml两种,下面将逐一介绍。 
    ===================================settings.xml===================================================================
     settings.xml对于maven来说相当于全局性的配置,用于所有的项目。在maven2中存在两个 settings.xml,一个位于maven2的安装目录conf下面,作为全局性配置。对于团队设置,保持一致的定义是关键,所以 maven2/conf下面的settings.xml就作为团队共同的配置文件。保证所有的团队成员都拥有相同的配置。当然对于每个成员,都需要特殊的 自定义设置,如用户信息,所以另外一个settings.xml就作为本地配置。默认的位置为:${user.dir} /.m2/settings.xml目录中(${user.dir} 指windows 中的用户目录)。
        settings.xml基本结构如下:
    xml 代码
     2 <settings 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  
     5                                http://maven.apache.org/xsd/settings-1.0.0.xsd">  
     6   <localRepository/>  
     7   <interactiveMode/>  
     8   <usePluginRegistry/>  
     9   <offline/>  
    10   <pluginGroups/>  
    11   <servers/>  
    12   <mirrors/>  
    13   <proxies/>  
    14   <profiles/>  
    15   <activeProfiles/>  
    16 </settings>  
    简单介绍一下几个主要的配置因素:
    localRepository:表示本地库的保存位置,也就是maven2主要的jar保存位置,默认在${user.dir}/.m2/repository,如果需要另外设置,就换成其他的路径。
    offline:如果不想每次编译,都去查找远程中心库,那就设置为true。当然前提是你已经下载了必须的依赖包。
    Servers:在POM中的 distributionManagement元素定义了开发库。然而,特定的username和pwd不能使用于pom.xml,所以通过此配置来保存server信息
    xml 代码
     2 <servers>  
     3    <server>  
     4      <id>server001</id>  
     5      <username>my_login</username>  
     6      <password>my_password</password>  
     7      <privateKey>${usr.home}/.ssh/id_dsa</privateKey>  
     8      <passphrase>some_passphrase</passphrase>  
     9      <filePermissions>664</filePermissions>  
    10      <directoryPermissions>775</directoryPermissions>  
    11      <configuration></configuration>  
    12    </server>  
    13  </servers>   
    • id:server 的id,用于匹配distributionManagement库id,比较重要。
    • username, password:用于登陆此服务器的用户名和密码
    • privateKey, passphrase:设置private key,以及passphrase
    • filePermissions, directoryPermissions:当库文件或者目录创建后,需要使用权限进行访问。参照unix文件许可,如664和775
    Mirrors:表示镜像库,指定库的镜像,用于增加其他库
    xml 代码
    1  <mirrors>  
    2    <mirror>  
    3      <id>planetmirror.com</id>  
    4      <name>PlanetMirror Australia</name>  
    5      <url>http://downloads.planetmirror.com/pub/maven2</url>  
    6      <mirrorOf>central</mirrorOf>  
    7    </mirror>  
    8  </mirrors>  
    • id,name:唯一的标志,用于区别镜像
    • url:镜像的url
    • mirrorOf:此镜像指向的服务id
    Proxies:此设置,主要用于无法直接访问中心的库用户配置。
    xml 代码
     1  <proxies>  
     2    <proxy>  
     3      <id>myproxy</id>  
     4      <active>true</active>  
     5      <protocol>http</protocol>  
     6      <host>proxy.somewhere.com</host>  
     7      <port>8080</port>  
     8      <username>proxyuser</username>  
     9      <password>somepassword</password>  
    10      <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>  
    11    </proxy>  
    12  </proxies>  
    • id:代理的标志
    • active:是否激活代理
    • protocol, host, port:protocol://host:port 代理
    • username, password:用户名和密码
    • nonProxyHosts: 不需要代理的host
    Profiles:类似于pom.xml中的profile元素,主要包括activation,repositories,pluginRepositories 和properties元素,  刚开始接触的时候,可能会比较迷惑,其实这是maven2中比较强大的功能。从字面上来说,就是个性配置。单独定义profile后,并不会生效,需要通过满足条件来激活。
    repositories 和pluginRepositories: 定义其他开发库和插件开发库。对于团队来说,肯定有自己的开发库。可以通过此配置来定义。如下的配置,定义了本地开发库,用于release 发布。
    xml 代码
     1  <repositories>  
     2         <repository>  
     3           <id>repo-local</id>  
     4        <name>Internal 开发库</name>  
     5        <url>http://192.168.0.2:8082/repo-local</url>  
     6           <releases>  
     7             <enabled>true</enabled>  
     8             <updatePolicy>never</updatePolicy>  
     9             <checksumPolicy>warn</checksumPolicy>  
    10           </releases>  
    11           <snapshots>  
    12             <enabled>false</enabled>  
    13           </snapshots>  
    14           <layout>default</layout>  
    15         </repository>  
    16       </repositories>  
    17       <pluginRepositories>  
    18     <pluginRepository>  
    19     <id>repo-local</id>  
    20     <name>Internal 开发库</name>  
    21     <url>http://192.168.0.2:8082/repo-local</url>  
    22     <releases>  
    23             <enabled>true</enabled>  
    24             <updatePolicy>never</updatePolicy>  
    25             <checksumPolicy>warn</checksumPolicy>  
    26     </releases>  
    27     <snapshots>  
    28     <enabled>false</enabled>  
    29     </snapshots>  
    30     <layout>default</layout>  
    31     </pluginRepository>  
    32     </pluginRepositories>  
    releases, snapshots:每个产品的版本的Release或者snapshot(注:release和snapshot的区别,release一般是比较稳定的版本,而snapshot基本上不稳定,只是作为快照)

    properties:maven 的properties作为placeholder值,如ant的properties。包括以下的5种类型值:
    1. env.X,返回当前的环境变量
    2. project.x:返回pom中定义的元素值,如project.version
    3. settings.x:返回settings.xml中定义的元素
    4. java 系统属性:所有经过java.lang.System.getProperties()返回的值
    5. x:用户自己设定的值
    Activation: 用于激活此profile
    xml 代码
     1  <activation>  
     2         <activeByDefault>false</activeByDefault>  
     3         <jdk>1.5</jdk>  
     4         <os>  
     5           <name>Windows XP</name>  
     6           <family>Windows</family>  
     7           <arch>x86</arch>  
     8           <version>5.1.2600</version>  
     9         </os>  
    10         <property>  
    11           <name>mavenVersion</name>  
    12           <value>2.0.3</value>  
    13         </property>  
    14         <file>  
    15           <exists>${basedir}/file2.properties</exists>  
    16           <missing>${basedir}/file1.properties</missing>  
    17         </file>  
    18  </activation>  
    • jdk:如果匹配指定的jdk版本,将会激活
    • os:操作系统
    • property:如果maven能检测到相应的属性
    • file: 用于判断文件是否存在或者不存在
    除了使用activation来激活profile,同样可以通过activeProfiles来激活
    Active Profiles:表示激活的profile,通过profile id来指定。
    xml 代码
    1   <activeProfiles>  
    2      <activeProfile>env-test</activeProfile> 指定的profile id  
    3   </activeProfiles> 
    ===================================pom.xml===================================================================
    什么是pom:pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。

    xml 代码
     1 <project>  
     2   <modelVersion>4.0.0modelVersion>  
     3   
     4     
     5   <groupId>...<groupId>  
     6   <artifactId>...<artifactId>  
     7   <version>...<version>  
     8   <packaging>...<packaging>  
     9   <dependencies>...<dependencies>  
    10   <parent>...<parent>  
    11   <dependencyManagement>...<dependencyManagement>  
    12   <modules>...<modules>  
    13   <properties>...<properties>  
    14   
    15     
    16   <build>...<build>  
    17   <reporting>...<reporting>  
    18   
    19     
    20   <name>...<name>  
    21   <description>...<description>  
    22   <url>...<url>  
    23   <inceptionYear>...<inceptionYear>  
    24   <licenses>...<licenses>  
    25   <organization>...<organization>  
    26   <developers>...<developers>  
    27   <contributors>...contributors>  
    28   
    29     
    30   <issueManagement>...<issueManagement>  
    31   <ciManagement>...<ciManagement>  
    32   <mailingLists>...<mailingLists>  
    33   <scm>...<scm>  
    34   <prerequisites>...<prerequisites>  
    35   <repositories>...<repositories>  
    36   <pluginRepositories>...<pluginRepositories>  
    37   <distributionManagement>...<distributionManagement>  
    38   <profiles>...<profiles>  
    39 <project>  
    基本内容:
        POM包括了所有的项目信息。定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素
    • groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
    • artifactId: 项目的通用名称
    • version:项目的版本
    • packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
    • classifier: 分类
    POM关系:要为依赖,继承,合成
     依赖关系:

    xml 代码
     
     1 <dependencies>  
     2     <dependency>  
     3       <groupId>junitgroupId>  
     4       <artifactId>junitartifactId>  
     5       <version>4.0version>  
     6       <type>jartype>  
     7       <scope>testscope>  
     8       <optional>trueoptional>  
     9     <dependency>  
    10     ...  
    11   <dependencies>  
    • groupId, artifactId, version:描述了依赖的项目唯一标志
    可以通过以下方式进行安装:
    • 使用以下的命令安装:
    • mvn install:install-file –Dfile=non-maven-proj.jar –DgroupId=some.group –DartifactId=non-maven-proj –Dversion=1
    • 创建自己的库,并配置,使用deploy:deploy-file
    • 设置此依赖范围为system,定义一个系统路径。不提倡。
    • type:相应的依赖产品包形式,如jar,war
    • scope:用于限制相应的依赖范围,包括以下的几种变量:
    • compile :默认范围,用于编译
    • provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
    • runtime:在执行时,需要使用
    • test:用于test任务时使用
    • system:需要外在提供相应得元素。通过systemPath来取得
    • systemPath: 仅用于范围为system。提供相应的路径
    • optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用
       独占性:外在告诉maven你只包括指定的项目,不包括相关的依赖。此因素主要用于解决版本冲突问题
     
    xml 代码
     1  <dependencies>  
     2     <dependency>  
     3       <groupId>org.apache.maven<groupId>  
     4       <artifactId>maven-embedder<artifactId>  
     5       <version>2.0<version>  
     6       <exclusions>  
     7         <exclusion>  
     8           <groupId>org.apache.maven<groupId>  
     9           <artifactId>maven-core<artifactId>  
    10         <exclusion>  
    11       <exclusions>  
    12     <dependency> 
    表示项目maven-embedder需要项目maven-core,但我们不想引用maven-core

    继承关系:另一个强大的变化,maven带来的是项目继承。主要的设置:
    定义父项目
    xml 代码
    <project>  
      <modelVersion>4.0.0<modelVersion>  
      <groupId>org.codehaus.mojo<groupId>  
      <artifactId>my-parent<artifactId>  
      <version>2.0<version>  
      <packaging>pom<packaging>  
    <project> 
        packaging 类型,需要pom用于parent和合成多个项目。我们需要增加相应的值给父pom,用于子项目继承。主要的元素如下:
    • 依赖型
    • 开发者和合作者
    • 插件列表
    • 报表列表
    • 插件执行使用相应的匹配ids
    • 插件配置
    • 子项目配置
    xml 代码
     1 <project>  
     2   <modelVersion>4.0.0<modelVersion>  
     3   <parent>  
     4     <groupId>org.codehaus.mojo<groupId>  
     5     <artifactId>my-parent<artifactId>  
     6     <version>2.0<version>  
     7     <relativePath>../my-parent<relativePath>  
     8   <parent>  
     9   <artifactId>my-project<artifactId>  
    10 <project> 
    relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

    dependencyManagement:用于父项目配置共同的依赖关系,主要配置依赖包相同因素,如版本,scope。

    合成(或者多个模块)
        一个项目有多个模块,也叫做多重模块,或者合成项目。
    如下的定义:
    xml 代码
     1 <project>  
     2   <modelVersion>4.0.0<modelVersion>  
     3   <groupId>org.codehaus.mojo<groupId>  
     4   <artifactId>my-parent<artifactId>  
     5   <version>2.0<version>  
     6   <modules>  
     7     <module>my-project1<module>  
     8     <module>my-project2<module>  
     9   <modules>  
    10 <project> 
    build 设置
        主要用于编译设置,包括两个主要的元素,build和report
      build
        主要分为两部分,基本元素和扩展元素集合
    注意:包括项目build和profile build
    xml 代码
    1  <project>   
    2   <build>...build>  
    3   <profiles>  
    4     <profile>    
    5       <build>...build>  
    6     <profile>  
    7   <profiles>  
    8 <project> 
    基本元素
    xml 代码
    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> 
    • defaultGoal: 定义默认的目标或者阶段。如install
    • directory: 编译输出的目录
    • finalName: 生成最后的文件的样式
    • filter: 定义过滤,用于替换相应的属性文件,使用maven定义的属性。设置所有placehold的值
    资源(resources)你项目中需要指定的资源。如spring配置文件,log4j.properties
    xml 代码
     
     1 <project>  
     2   <build>  
     3     ...  
     4     <resources>  
     5       <resource>  
     6         <targetPath>META-INF/plexus<targetPath>  
     7         <filtering>false<filtering>  
     8         <directory>${basedir}/src/main/plexus<directory>  
     9         <includes>  
    10           <include>configuration.xml<include>  
    11         <includes>  
    12         <excludes>  
    13           <exclude>**/*.properties<exclude>  
    14         <excludes>  
    15       <resource>  
    16     <resources>  
    17     <testResources>  
    18       ...  
    19     <testResources>  
    20     ...  
    21   <build>  
    22 <project>  
    • resources: resource的列表,用于包括所有的资源
    • targetPath: 指定目标路径,用于放置资源,用于build
    • filtering: 是否替换资源中的属性placehold
    • directory: 资源所在的位置
    • includes: 样式,包括那些资源
    • excludes: 排除的资源
    • testResources: 测试资源列表
    插件: 在build时,执行的插件,比较有用的部分,如使用jdk 5.0编译等等
    xml 代码
     
     1 <project>  
     2   <build>  
     3     ...  
     4     <plugins>  
     5       <plugin>  
     6         <groupId>org.apache.maven.plugins<groupId>  
     7         <artifactId>maven-jar-plugin<artifactId>  
     8         <version>2.0<version>  
     9         <extensions>false<extensions>  
    10         <inherited>true<inherited>  
    11         <configuration>  
    12           <classifier>test<classifier>  
    13         <configuration>  
    14         <dependencies>...<dependencies>  
    15         <executions>...<executions>  
    16       <plugin>  
    17     <plugins>  
    18   <build>  
    19 <project> 
    • extensions: true or false,是否装载插件扩展。默认false
    • inherited: true or false,是否此插件配置将会应用于poms,那些继承于此的项目
    • configuration: 指定插件配置
    • dependencies: 插件需要依赖的包
    • executions: 用于配置execution目标,一个插件可以有多个目标。
    如下:
       
    xml 代码
     2 <plugin>  
     3         <artifactId>maven-antrun-plugin<artifactId>  
     4           <executions>  
     5           <execution>  
     6             <id>echodir<id>  
     7             <goals>  
     8               <goal>run<goal>  
     9             <goals>  
    10             <phase>verify<phase>  
    11             <inherited>falsein<herited>  
    12             <configuration>  
    13               <tasks>  
    14                 <echo>Build Dir: ${project.build.directory}<echo>  
    15               <tasks>  
    16             <configuration>  
    17           <execution>  
    18         <executions>  
    19       <plugin> 
      说明:
    • id:规定execution 的唯一标志
    • goals: 表示目标
    • phase: 表示阶段,目标将会在什么阶段执行
    • inherited: 和上面的元素一样,设置false maven将会拒绝执行继承给子插件
    • configuration: 表示此执行的配置属性

    插件管理:pluginManagement:插件管理以同样的方式包括插件元素,用于在特定的项目中配置。所有继承于此项目的子项目都能使用。主要定义插件的共同元素

    扩展元素集合主要包括以下的元素:
    Directories
    用于设置各种目录结构,如下:
    xml 代码
    1 <build>  
    2     <sourceDirectory>${basedir}/src/main/java<sourceDirectory>  
    3     <scriptSourceDirectory>${basedir}/src/main/<scriptsscriptSourceDirectory>  
    4     <testSourceDirectory>${basedir}/src/test/java<testSourceDirectory>  
    5     <outputDirectory>${basedir}/target/classes<outputDirectory>  
    6     <testOutputDirectory>${basedir}/target/test-classes<testOutputDirectory>  
    7     ...  
    8   <build>  

    Extensions:表示需要扩展的插件,必须包括进相应的build路径。
    xml 代码
     1 <project>  
     2   <build>  
     3     ...  
     4     <extensions>  
     5       <extension>  
     6         <groupId>org.apache.maven.wagon<groupId>  
     7         <artifactId>wagon-ftp<artifactId>  
     8         <version>1.0-alpha-3<version>  
     9       <extension>  
    10     <extensions>  
    11     ...  
    12   <build>  
    13 <project>  
    Reporting:    用于在site阶段输出报表。特定的maven 插件能输出相应的定制和配置报表。
     
    xml 代码
     
     1 <reporting>  
     2     <plugins>  
     3       <plugin>  
     4         <outputDirectory>${basedir}/target/site<outputDirectory>  
     5         <artifactId>maven-project-info-reports-plugin<artifactId>  
     6         <reportSets>  
     7           <reportSet><reportSet>  
     8         <reportSets>  
     9       <plugin>  
    10     <plugins>  
    11   <reporting>  
    Report Sets:用于配置不同的目标,应用于不同的报表
    xml 代码
     
     1 <reporting>  
     2     <plugins>  
     3       <plugin>  
     4         ...  
     5         <reportSets>  
     6           <reportSet>  
     7             <id>sunlink<id>  
     8             <reports>  
     9               <report>javadoc<report>  
    10             <reports>  
    11             <inherited>truein<herited>  
    12             <configuration>  
    13               <links>  
    14                 <link>http://java.sun.com/j2se/1.5.0/docs/api/<link>  
    15               <links>  
    16             <configuration>  
    17           <reportSet>  
    18         <reportSets>  
    19       <plugin>  
    20     <plugins>  
    21   <reporting> 
     
  • 相关阅读:
    hdu 5151 Sit sit sit
    hdu 5150 Sit sit sit
    cf C. Arithmetic Progression
    hdu 5125 magic balls
    Pots(bfs)
    Prime Path(素数筛选+bfs)
    A Knight's Journey(dfs)
    Colored Sticks (字典树哈希+并查集+欧拉路)
    Squares(哈希)
    Gold Balanced Lineup(哈希表)
  • 原文地址:https://www.cnblogs.com/cugb-2013/p/3719206.html
Copyright © 2020-2023  润新知