Maven学习之路(五)maven的灵活构建--属性、profile和资源过滤

前言

在很多情况下,我们希望项目在不同的阶段有不同的构建,开发的时候,使用开发的环境配置,测试的时候,使用测试的环境配置,上线的时候使用其他的配置,虽然说,每次切换项目运行的环境的时候,我们可以手动更改配置,但这样难免有疏漏之处,导致项目构建的失败。这个时候,我们就需要Maven进行灵活的构建,使用属性、profile和资源过滤三个特性达到根据不同的环境构建项目的目的。

一、Maven 属性

最常见的用法–自定义的Maven属性

使用properties自定义属性,,然后使用${}引用上满定义的属性

<-定义属性--->
<properties>
		<oneVirsion>xxxxx</oneVirsion>
</properties>

<!--使用属性-->
<dependencyManagement>
		<dependency>
			<groupId>...</groupId>
			<artifactId>...</artifactId>
			<version>${oneVirsion}</version>
		</dependency>
</dependencyManagement>

maven内置的属性

主要有两个内置属性

  • ${basedir} 表示项目的根目录,即包含pom.xml的目录
  • ${version} 表示项目的版本

POM属性

用户可以使用引用POM文件对应元素的值,例如${project.artifacId},对应了< project > < aritfactId >元素的值。
常用属性

   	  ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java

      ${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java

      ${project.build.directory}:项目构件输出目录,默认为target/

      ${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/

      ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes/

      ${project.groupId}:项目的groupId    

      ${project.artifactId}:项目的artifactId  

      ${project.version}:项目的version,与${version}等价

      ${project.build.fianlName}:项目打包输出文件的名称。默认为${project.artifactId}-${project.version}

settings.xml 属性

可以使用sttings. 开头的属性引用settings.xml文件中XML元素的值,例如常用的${settings.localRespository}指向用户本地仓库的地址。

Java系统属性

所有的Java系统属性都可以使用Maven属性引用。例如${user.home}指向了用户目录。可以使用mvn help:system 查看所有的Java系统属性。

环境变量属性

所有的环境边浪都可以使用以env.开头的Maven属性引用。例如${env.JAVA_HOME},指代了JAVA_HOME环境变量的值。用户可以使用mvn help:system查看所有的环境变量。

二、资源过滤

上面说了Maven有哪些属性可以使用,但是,只有在pom文件中,$ {xxx}才会被解析,如何在项目的配置文件中(例如日志配置文件、数据库配置文件等)使用${xxx}呢?我们需要配置Maven对含有 ${}属性引用的项目配置文件进行文本替换,具体方式就是,配置资源的过滤。

   <resources>
      <resource>
        <directory>${project.basedir}/src/main/resources</directory>
        <!--开启资源过滤,项目构建时会将当前资源文件中Maven的属性文件替换为配置的文件-->
        <filtering>true</filtering>
      </resource>
    </resources>

这里需要注意以下几点:

  • 超级pom中定义了项目默认的资源文件夹为${project.basedir}/src/main/resources
  • 需要开启资源过滤

下面举个例子:
开启资源过滤
在这里插入图片描述
引用Maven属性
在这里插入图片描述
查看项目构建后,Maven属性有没有替换
在这里插入图片描述
图中显示Maven属性已经被替换。

三、profile

profile允许你定义一个环境,在这个环境中你可以自由定制自己所需的项目构建方式。

下面,结合上面介绍的Maven属性和资源过滤,实现不同环境下,配置文件中的desc被配置成不同的值:
配置自定义属性,并开启资源过滤

<?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.souche</groupId>
  <artifactId>log-demo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>log-demo</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>


  <profiles>
  <!--不同构建环境下,desc配置不同的值-->
    <profile>
      <id>p1</id>
      <properties>
        <desc>profile的id为p1时,啦啦啦啦</desc>
      </properties>
    </profile>
    <profile>
      <id>p2</id>
      <properties>
        <desc>profile的id为p2时,嘟嘟嘟嘟嘟</desc>
      </properties>
    </profile>
  </profiles>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>


  <build>
<!--配置资源过滤-->
    <resources>
      <resource>
        <directory>${project.basedir}/src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    
  </build>
</project>

配置文件中引用profile中自定义的属性。
在这里插入图片描述
构建项目,并激活(有多种方式,我们先选命令行激活的方式)不同profile

  • 激活p1
mvn clean package -DskipTests -Pp1

结果
在这里插入图片描述

  • 激活p2
mvn clean package -DskipTests -Pp2

结果
在这里插入图片描述

3.1、profile配置

Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。profile可以在pom.xml中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命令行标记告诉Maven运行特定profile中的目标。一个Profiles下面允许出现的元素:

<project>
    <profiles>
        <profile>
            <build>
                <defaultGoal>...</defaultGoal>
                <finalName>...</finalName>
                <resources>...</resources>
                <testResources>...</testResources>
                <plugins>...</plugins>
            </build>
            <reporting>...</reporting>
            <modules>...</modules>
            <dependencies>...</dependencies>
            <dependencyManagement>...</dependencyManagement>
            <distributionManagement>...</distributionManagement>
            <repositories>...</repositories>
            <pluginRepositories>...</pluginRepositories>
            <properties>...</properties>
        </profile>
    </profiles>
</project>

3.2、激活profile

命令行激活

使用-P参数,后面紧跟profile的id来激活profile
例如上面的例子

mvn clean package -DskipTests -Pp2

其他激活方式还有settings文件激活、系统属性激活、操作系统换将激活、默认激活等其他方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值