1. 灵活构建

1.1 三大特性

  • 属性
  • 资源过滤
  • Profile

1.2 属性

  1. 自定义属性

    • 用户可以在项目的pom文件的<properties>元素中自定义maven属性。
    • 在pom文件的其他地方,使用${属性名称}引用该属性。
    • 意义在于消除重复,示例代码如下。

      <project>
          <properties>
              <springframework.groupId>org.springframework</springframework.groupId>
              <springframework.version>5.2.1.RELEASE</springframework.version>
          </properties>
          <dependencies>
              <dependency>
                  <groupId>${springframework.groupId}</groupId>
                  <artifactId>spring-web</artifactId>
                  <version>${springframework.version}</version>
              </dependency>
              <dependency>
                  <groupId>${springframework.groupId}</groupId>
                  <artifactId>spring-aop</artifactId>
                  <version>${springframework.version}</version>
              </dependency>
          </dependencies>
      </project>
  2. 内置属性
    两个常用的内置属性:

    • ${basedir}: 项目根目录,即包含pom文件的目录
    • ${version}: 项目版本
  3. pom属性
    用户可以使用该类属性引用pom文件中对应元素的值。
    常用的pom属性如下:

    • ${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}等价。
    • ${project.build.finalName}: 项目打包输出文件的名称。默认为${project.artifactId}-${project.version}
  4. settings属性
    用户可以使用该类属性引用settings文件中对应元素的值。

    • ${settings.localRepository}:用户本地仓库
  5. Java系统属性

    • 所有Java系统属性都可以使用Maven属性引用。
    • 使用mvn help:system查看所有的Java系统属性。
    • ${user.home}:用户目录
  6. 环境变量属性

    • 所有环境变量都可以使用env.开头的Maven属性引用。
    • 使用mvn help:system查看所有的环境变量属性。
    • ${env.JAVA_HOME}: JAVA_HOME环境变量的值。

1.3 资源过滤

  1. 遇到的问题

    • 多环境配置:项目不同的环境对应着不同的数据库配置,手动更改这些配置往往比较低效。
  2. 解决

    1. 使用maven属性将这些会发生变化的部分提取出来。
    2. 然后开启资源目录的过滤功能,就可以解决这一问题。
  3. 示例

    • 数据库配置

      # src/main/resources/application.properties
      database.jdbc.driverClass=${db.driver}
      database.jdbc.connectionUrl=${db.url}
      database.jdbc.username=${db.user}
      database.jdbc.password=${db.pw}
    • 开启资源过滤

      <project>    
          <properties>
              <db.driver>com.mysql.jdbc.Driver</db.driver>
              <db.url>jdbc:mysql//localhost:3306/test</db.url>
              <db.user>dev-user</db.user>
              <db.pw>dev-pwd</db.pw>
          </properties>
      
          <build>
              <resources>
                  <resource>
                      <directory>${project.basedir}/src/main/resources</directory>
                      <filtering>true</filtering>
                  </resource>
              </resources>
          </build>
      </project>    
      
    • 编译代码mvn compile

      • 查看主代码编译输出目录下的资源文件,已经得到了替换。
      database.jdbc.driverClass=com.mysql.jdbc.Driver
      database.jdbc.connectionUrl=jdbc:mysql//localhost:3306/test
      database.jdbc.username=aaa
      database.jdbc.password=aaa-pwd

1.4 maven profile

  1. 针对不同环境的profile

    • 示例:基于开发和测试环境的profile

          <project>    
          <profiles>
              <profile>
                  <id>dev</id>
                  <properties>
                      <db.driver>com.mysql.jdbc.Driver</db.driver>
                      <db.url>jdbc:mysql//localhost:3306/test</db.url>
                      <db.user>dev</db.user>
                      <db.pw>dev-pwd</db.pw>
                  </properties>
              </profile>
      
              <profile>
                  <id>test</id>
                  <properties>
                      <db.driver>com.mysql.jdbc.Driver</db.driver>
                      <db.url>jdbc:mysql//localhost:3306/test</db.url>
                      <db.user>test</db.user>
                      <db.pw>test-pwd</db.pw>
                  </properties>
              </profile>
          </profiles>
      </project>    
  2. 激活profile

    1. 命令行激活

      • 使用maven命令行参数 -P 加上profile的 id ,多个id之间逗号分隔
      • 如:mvn clean compile -Pdev
    2. 默认激活

      • 配置profile > activation > activationByDefault元素的值为true,该profile默认激活

        <project>    
            <profiles>
                <profile>
                    <id>dev</id>
                    <activation>
                        <activeByDefault>true</activeByDefault>
                    </activation>
                    <properties>
                        <db.driver>com.mysql.jdbc.Driver</db.driver>
                        <db.url>jdbc:mysql//localhost:3306/test</db.url>
                        <db.user>dev</db.user>
                        <db.pw>dev-pwd</db.pw>
                    </properties>
                </profile>
            </profiles>
        </project>    
    3. 系统属性激活

      • mvn ... -D属性xx=属性xx的值
      • 指定的属性存在,激活profile
      • 指定的属性存在,并且值等于x时,激活profile

        <project>    
            <profiles>
                <profile>
                    <id>dev</id>
                    <activation>
                        <property>
                            <name>test</name>
                            <value>x</value>
                        </property>
                    </activation>
                    <properties>
                        <db.driver>com.mysql.jdbc.Driver</db.driver>
                        <db.url>jdbc:mysql//localhost:3306/test</db.url>
                        <db.user>dev</db.user>
                        <db.pw>dev-pwd</db.pw>
                    </properties>
                </profile>
            </profiles>
        </project>    
        
    4. 文件存在与否激活

      <project>    
          <profiles>
              <profile>
                  <id>dev</id>
                  <activation>
                      <file>
                          <exists>x.properties</exists>
                          <missing>y.properties</missing>
                      </file>
                  </activation>
                  <properties>
                      <db.driver>com.mysql.jdbc.Driver</db.driver>
                      <db.url>jdbc:mysql//localhost:3306/test</db.url>
                      <db.user>dev</db.user>
                      <db.pw>dev-pwd</db.pw>
                  </properties>
              </profile>
          </profiles>
      </project>    
  3. 查看当前激活的profile

    • mvn help:active-profiles
  4. 列出所有的profile

    • mvn help:all-profiles

John
10 声望2 粉丝

好记性不如烂笔头。


引用和评论

0 条评论