maven(三)配置文件

项目级别配置文件:pom.xml
用户级别的配置文件: %USER_HOME%/.m2/settings.xml
全局(Global)配置文件:%M2_HOME%/conf/settings.xml

3.1 项目级别的配置文件 pom

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息。

执行任务或目标(goal)时,Maven会在当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。

POM 中可以指定以下配置

  • 项目的基本信息配置 groupId,artifactId,version
  • 项目的父项目配置 parent
  • 项目依赖配置 dependencies dependencyManagement
  • 项目仓库配置 repositories
  • 项目部署配置 distributionManagement
  • 项目scm配置 scm
  • 项目构建配置 bulid
  • 项目构建多文件配置 profiles
  • 项目开发者列表 developers
  • 相关邮件列表信息 mailingLists

3.1.1 pom中项目的基本信息配置

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.demo</groupId>
    <artifactId>test-maven</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    
    <name>test-maven</name>
    <url>http://www.baidu.com/test-maven</url>
    <description>A maven project to test-maven.</description>
</project>    

解释:

  • <modelVersion>声明配置文件遵循哪一个POM模型版本。

  • <groupId>项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目,并且构建时生成的路径也是由此生成。

  • <artifactId>构件的标识符,它和groupID一起构成了项目构件的唯一标识

  • <packaging>项目产生的构件类型,例如jar、war、ear、pom。

  • <version>项目当前版本,格式为:主版本.次版本.增量版本-限定版本号

  • <name>项目的名称, Maven产生的文档用。

  • <url> 项目主页的URL, Maven产生的文档用 .

  • <description>项目的详细描述, 可以使用html格式描述, Maven 产生的文档用。

3.1.2 pom中父项目配置

<parent>
    <artifactId />
    <groupId />
    <version />
    <relativePath />
</parent>

解释:

  • <parent>父项目的坐标。如果子项目中没有规定某个元素的值,那么默认继承父项目中该元素的值。
  • <relativePath />父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是…/pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。

超级父项目(Super POM)

Super POM是Maven默认的POM,所有的 POM 都继承自一个Super POM(无论是否显式定义了这个Super POM)。

Super POM包含了一些可以被继承的默认设置,比如默认的仓库,因此,当 Maven发现需要下载 POM 中的依赖时,会到Super POM中配置的默认仓库 http://repo1.maven.org/maven2 去下载。

可以使用以下命令来查看 Super POM 默认配置:

mvn help:effective-pom

3.1.3 pom中项目依赖配置

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-artifact</artifactId>
        <version>3.8.1</version>
        <type>jar</type>
        <classifier></classifier>
        <scope>test</scope>
        <systemPath></systemPath>
        <exclusions>
            <exclusion>
                <artifactId>spring-core</artifactId>
                <groupId>org.springframework</groupId>
            </exclusion>
        </exclusions>
        <optional>true</optional>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
        	......
        </dependency>
    </dependencies>
</dependencyManagement>

解释:

  • <dependencies>描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节
  • <dependency>描述一个依赖
  • <groupId>依赖的groupId
  • <artifactId>依赖的artifact ID
  • <version>依赖的版本号
  • <type>依赖类型,默认类型是jar, 表示依赖的文件的扩展名。其他扩展名类型的例子:jar,war,ejb-client和test-jar。如果设置extensions为 true,就可以在 plugin里定义新的类型。
  • <classifier> 依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。
  • <scope> 依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。
    • compile :默认范围,用于编译 。
    • provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath 。
    • runtime:在执行时需要使用 。
    • test:用于test任务时使用 。
    • system:需要外在提供相应的元素。通过systemPath来取得stemPath: 仅用于范围为system, 提供相应的路径 。
    • optional:当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用。
  • <systemPath>仅供system依赖范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}
  • <exclusions>当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。此元素主要用于解决版本冲突问题。
  • <optional>可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。
  • <dependencyManagement>声名依赖信息,如果项目依赖(dependencies)中使用了被声明的依赖,则通过group ID和artifact ID 匹配到声明的依赖,并使用声明的依赖信息(比如版本信息)。

3.1.4 pom中项目仓库配置

<repositories>
    <repository>
        <id>nexusmy</id>
        <name>Team Maven Repository</name>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
        </releases>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
        </snapshots>
		<layout>default</layout>
	</repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>nexusmy</id>
        <name>Team Maven Repository</name>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
        	<enabled>true</enabled>
        </releases>
        <snapshots>
        	<enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

解释:

  • <repositories>:配置远程仓库列表

  • <repositorie>:配置远程仓库

  • <pluginRepositories>: 配置插件的远程仓库列表

  • <pluginRepository>: 配置插件的远程仓库

  • <id>: 配置远程仓库唯一标识符。可以用来匹配在settings.xml文件里配置的远程仓库

  • <name>: 配置远程仓库的名称

  • <url>:远程仓库URL,按protocol://hostname/path形式

  • <layout>: 用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)

  • <releases>:配置仓库中发布版的一些属性

  • <snapshots>:配置仓库中快照版的一些属性

  • <enabled>: 配置该仓库是否开启下载某种类型构件(发布版,快照版)

  • <updatePolicy> 配置更新发生的频率。

    Maven会比较本地POM和远程POM的时间戳,可选项如下:

    • always(一直)
    • daily(默认,每日)
    • interval:X(这里X是以分钟为单位的时间间隔)
    • never(从不)
  • <checksumPolicy /> : 配置Maven验证构件校验文件失败时的策略:ignore(忽略),fail(失败),或者warn(警告)。

  • <uniqueVersion>是分配给快照一个唯一的版本号(由时间戳和构建流水号)?还是每次都使用相同的版本号?

3.1.5 pom中项目部署配置

<distributionManagement>
    <repository>
        <uniqueVersion />
        <id>banseon-maven2</id>
        <name>banseon maven2</name>
        <url>file://${basedir}/target/deploy</url>
        <layout />
    </repository>
    <snapshotRepository>
        <uniqueVersion />
        <id>banseon-maven2</id>
        <name>Banseon-maven2 Snapshot Repository</name>
        <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
        <layout />
    </snapshotRepository>
    <site>
        <id>banseon-site</id>
        <name>business api website</name>
        <url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web</url>
    </site>
    <downloadUrl />
    <relocation>
        <groupId />
        <artifactId />
        <version />
        <message />
    </relocation>
    <status />
</distributionManagement>

解释:

  • <distributionManagement>:项目分发信息,表示要发布的位置, 在执行mvn deploy后把网站部署到远程服务器或者把构件部署到远程仓库。

  • <repository> 构件的发布版部署到哪里

  • <snapshotRepository> 构件的快照版部署到哪里

  • <site>: 配置网站部署到哪里

  • <downloadUrl>: 项目下载页面的URL

  • <relocation>: 如果构件有了新的group ID和artifact ID(构件移到了新的位置),列出构件的重定位信息

  • <message>: 显示给用户的,关于移动的额外信息,例如原因

  • <status>: 给出该构件在远程仓库的状态。不得在本地项目中设置该元素,因为这是工具自动更新的。

有效的值有:

  • none(默认)
  • converted(仓库管理员从 Maven 1 POM转换过来)
  • partner(直接从伙伴Maven 2仓库同步过来)
  • deployed(从Maven 2实例部 署)
  • verified(被核实时正确的和最终的)。

3.1.6 pom中scm配置

<scm>
    <connection>
    	scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
    </connection>
    <developerConnection>
    	scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
    </developerConnection>
    <tag />
    <url>http://svn.baidu.com/banseon</url>
</scm>

解释:

  • <scm>: SCM(Source Control Management)标签允许你配置你的代码库,供Maven web站点和其它插件使用。
  • <connection>: 代码库的地址,连接只读
  • <developerConnection>: 给开发者使用的代码库的地址,该连接不仅仅只读
  • <tag>: 当前代码的标签,在开发阶段默认为HEAD
  • <url>:在浏览器上代码库的地址

3.1.7 pom中项目构建配置bulid

 <build>
 	 <sourceDirectory>D:\mycode\test-maven\src\main\java</sourceDirectory>
     <scriptSourceDirectory>D:\mycode\test-maven\src\main\scripts</scriptSourceDirectory>
     <testSourceDirectory>D:\mycode\test-maven\src\test\java</testSourceDirectory>
     <outputDirectory>D:\mycode\test-maven\target\classes</outputDirectory>
     <testOutputDirectory>D:\mycode\test-maven\target\test-classes</testOutputDirectory>
     <defaultGoal />
     <resources>
         <resource>
            <directory>D:\mycode\test-maven\src\main\resources</directory>
         </resource>
     </resources>
     <testResources>
         <testResource>
            <directory>D:\mycode\test-maven\src\test\resources</directory>
         </testResource>
     </testResources>
     <directory>D:\mycode\test-maven\target</directory>
     <finalName>test-maven-1.0-SNAPSHOT</finalName>
     <filters/> 
     <pluginManagement>
        <plugins>
          <plugin>
          ......
          </plugin>
        </plugins>
      </pluginManagement>
      <plugins>
          <plugin>
			......
          </plugin>
      </plugins>
 </bulid>

解释:

  • <sourceDirectory>: 项目源码目录,当构建项目的时候,构建系统会编译目录里的源码(相对于pom.xml的相对路径)。
  • <scriptSourceDirectory>项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容会被拷贝到输出目录。
  • <testSourceDirectory>: 项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。
  • <outputDirectory>:被编译过的应用程序class文件存放的目录.
  • <testOutputDirectory>:被编译过的测试class文件存放的目录。
  • <defaultGoal>:当项目没有规定目标(Maven2 叫做阶段)时的默认值 。
  • <resources>: 项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。
  • <testResources>:单元测试相关的所有资源路径,例如和单元测试相关的属性文件。
  • <directory>: 构建产生的所有文件存放的目录。
  • <finalName>: 将调用所生成构件的文件名(不包括扩展名,并且没有路径信息)
  • <filters/>:启用筛选时使用的筛选属性文件列表。
  • <pluginManagement>: 在一组pom中使用的默认插件信息的管理部分
  • <plugins>配置使用的插件列表
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <id>antrun-pre-clean</id>
                <phase>pre-clean</phase>
                <configuration>
                    <target>
                        <echo message="run plugin"/>
                    </target>
                </configuration>
                <goals>
                    <goal>run</goal>
                </goals>
                <inherited>true</inherited>
            </execution>
        </executions>
        <inherited>true</inherited>
        <extensions>false</extensions>
        <dependencies>
            <dependency>
            ......
            </dependency>
        </dependencies>
    </plugin>
</plugins>

解释:

  • <executions>:在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。
  • <execution>:执行一个目标的配置
  • <id>: 执行目标的标识符,用于标识构建过程中的目标
  • <phase>: 绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段
  • <goals>: 配置的执行目标
  • <inherited>: 配置是否被传播到子POM
  • <configuration>: 作为DOM对象的配置
  • <extensions>: 是否从这里加载Maven扩展(例如打包和类型处理程序) 插件。 出于性能原因,应该只在必要时启用
  • <dependencies>: 项目引入插件所需要的额外依赖

3.1.8 pom中项目构建多文件配置 profiles

<profiles>可以定义在pom中,用户级配置setting中,全局配置setting中。

<profiles>
    <profile>
        <id>dev</id>
        <activation></activation>
        <build></build>
        <reporting></reporting>
        <modules></modules>
        <repositories></repositories>
        <pluginRepositories></pluginRepositories>
        <dependencyManagement></dependencyManagement>
        <dependencies></dependencies>
    </profile>
        <profile>
        <id>fat</id>
        <activation></activation>
        <build></build>
        <reporting></reporting>
        <modules></modules>
        <repositories></repositories>
        <pluginRepositories></pluginRepositories>
        <dependencyManagement></dependencyManagement>
        <dependencies></dependencies>
    </profile>
</profiles>

解释:

  • <profiles>:项目本地构建配置文件的列表,它将在激活时修改构建过程。

  • <profile>:项目本地某个构建配置文件。

  • <id>: profile的唯一标识符。即用于命令行激活,也用于在继承时合并具有相同标识符的profile。

  • <activation>: 配置自动激活profile的方式

  • <modules>:作为该项目的一部分构建的模块(有时称为子项目)。列出的每个模块都是包含该模块的目录的相对路径。

  • <reporting>:该元素包括使用报表插件产生报表的规范。当用户执行"mvn site",这些报表就会运行。 在页面导航栏能看到所有报表的链接。

<activation>激活方式配置

<activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
    <os>
        <!--激活profile的操作系统的名字 -->
        <name>Windows XP</name>
        <!--激活profile的操作系统所属家族(如 'windows') -->
        <family>Windows</family>
        <!--激活profile的操作系统体系结构 -->
        <arch>x86</arch>
        <!--激活profile的操作系统版本 -->
        <version>5.1.2600</version>
    </os>
    <!--如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。如果值 字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段 -->
    <property>
        <!--激活profile的属性的名称 -->
        <name>mavenVersion</name>
        <!--激活profile的属性的值 -->
        <value>2.0.3</value>
    </property>
    <!--提供一个文件名,通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在,如果不存在则激活 profile。另一方面,exists则会检查文件是否存在,如果存在则激活profile。 -->
    <file>
        <!--如果指定的文件存在,则激活profile。 -->
        <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists>
        <!--如果指定的文件不存在,则激活profile。 -->
        <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing>
    </file>
</activation>

解释:

  • <activation>:配置自动激活profile的方式。Activation是profile的激活的一种方式。
  • <activeByDefault>:配置是否默认激活profile
  • <jdk>:当匹配jdk版本时,profile被激活。
  • <os>:当匹配操作系统属性时,profile将被激活。
  • <property>:指定此系统属性时,profile将被激活。
  • <file>:文件的存在或者不存在时,profile将被激活。

profile的激活方式

  • 在命令控制台中使用 maven 命令激活 profile:mvn test -Pdev

    命令说明:第一个 test 为 Maven 生命周期阶段, dev 为构建配置文件指定的 <id> 参数,这个参数通过 -P 来传输。

  • 通过Maven设置激活配置文件,在settings.xml文件中添加配置

    <settings 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/xsd/settings-1.0.0.xsd">
       ...
       <activeProfiles>
          <activeProfile>dev</activeProfile>
       </activeProfiles>
    </settings>
    
  • 通过环境变量激活配置文件 以及 <activation>配置

    在profile中增加配置

    <activation>
        <property>
            <name>env</name>
            <value>test</value>
        </property>
    </activation>
    

    在命令控制台中使用 maven 命令:mvn test -Denv=test

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值