maven 灵活构建

灵活构建
  项目的构建根据不同的情况可能需要有一定的差异,比如编译级别、依赖、打包的属性文件等在不同的运行环境中可能需要有不同的值。为了实现灵活构建,Maven内置了三个特性:

属性:在POM中通过${属性名称}引用构建时的属性值,从而达到灵活构建的目的,主要有六种属性,包括内置属性、POM属性、自定义属性、setting属性、Java系统属性、 环境变量属性。

属性替换可以在pom.xml和资源文件中使用,在资源文件中使用时需要开启资源文件过滤pom.xml是默认开启的。可以使用的属性如下:

1.   内置属性:如¥{basedir}表示项目根目录,¥{version}表示项目版本

2.   POM属性:用户可以引用pom文件中对应的值。如:

${project.build.directory} 构建目录,缺省为target

${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes

${project.build.finalName} 产出物名称,¥{project.artifactId}-{project.version}

${project.packaging} 打包类型,缺省为jar

${project.xxx} 当前pom文件的任意节点的内容

3.   自定义属性:用户可以在pom的元素下自定义maven属性。

4.   setting属性:用户可以使用以settings开头的属性引用settings.xmlxml元素的值,如

${settings.localRepository}指向用户本地仓库的地址。

5.   java系统属性maven可以使用当前java系统的属性,如${user.home}指向了用户目录。

6.   环境变量属性:所有环境变量都可以使用以env.开头的属性。如:${env.JAVA_HOE}

profile:profile能够定义多个POM的子集,在构建的时候动态激活某个profile,从而修改POM。
资源过滤:资源过滤是指Maven对项目资源文件内容进行变量替换。在资源过滤被激活的时候,Maven会扫描资源,寻找由${}包围的Maven属性的引用。一旦找到这些引用,就会使用合适的值去替换它们.

案例1、灵活构建测试环境和开发环境,(前提需要开启资源文件过滤)

  <!-- 灵活构建 -->
  <profiles>
    <profile>
      <id>dev</id>
      <properties>
        <jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
        <jdbc.ur>jdbc:oracle:thin:@localhost:1521:XE</jdbc.ur>
        <jdbc.username>hr</jdbc.username>
        <jdbc.password>hr</jdbc.password>
        <project.build.sourceEncoding>gbk</project.build.sourceEncoding>
      </properties>
      <!-- 默认激活 -->
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
    </profile>
    <profile>
      <id>test</id>
      <properties>
        <jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
        <jdbc.ur>jdbc:oracle:thin:@localhost:1521:XE</jdbc.ur>
        <jdbc.username>test</jdbc.username>
        <jdbc.password>test</jdbc.password>
        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
      </properties>
    </profile>
  </profiles>
  <build>
  <!-- 插件配置 -->
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

案例2、如果属性过多,导致POM文件过大,(${profile.id}.properties 注意)

<!-- 灵活构建 -->
  <profiles>
    <profile>
      <id>dev</id>
      <properties>
        <profile.id>dev</profile.id>
      </properties>
      <!-- 默认激活 -->
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
    </profile>
    <profile>
      <id>test</id>
      <properties>
        <profile.id>test</profile.id>
      </properties>
    </profile>
  </profiles>
<build>
  <!-- 插件配置 -->
    <filters>
      <filter>src/main/filters/${profile.id}.properties</filter>
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>


原文地址:https://www.cnblogs.com/wuhaidong/p/10600982.html