Maven学习7: 多环境构建

1. 灵活构建

1.1 三大特性

  • 属性
  • 资源过滤
  • Profile

1.2 属性

  1. 自定义属性

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

      
          
              org.springframework
              5.2.1.RELEASE
          
          
              
                  ${springframework.groupId}
                  spring-web
                  ${springframework.version}
              
              
                  ${springframework.groupId}
                  spring-aop
                  ${springframework.version}
              
          
      
  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}
    • 开启资源过滤

          
          
              com.mysql.jdbc.Driver
              jdbc:mysql//localhost:3306/test
              dev-user
              dev-pwd
          
      
          
              
                  
                      ${project.basedir}/src/main/resources
                      true
                  
              
          
          
      
    • 编译代码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

              
          
              
                  dev
                  
                      com.mysql.jdbc.Driver
                      jdbc:mysql//localhost:3306/test
                      dev
                      dev-pwd
                  
              
      
              
                  test
                  
                      com.mysql.jdbc.Driver
                      jdbc:mysql//localhost:3306/test
                      test
                      test-pwd
                  
              
          
          
  2. 激活profile

    1. 命令行激活

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

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

            
            
                
                    dev
                    
                        true
                    
                    
                        com.mysql.jdbc.Driver
                        jdbc:mysql//localhost:3306/test
                        dev
                        dev-pwd
                    
                
            
            
    3. 系统属性激活

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

            
            
                
                    dev
                    
                        
                            test
                            x
                        
                    
                    
                        com.mysql.jdbc.Driver
                        jdbc:mysql//localhost:3306/test
                        dev
                        dev-pwd
                    
                
            
            
        
    4. 文件存在与否激活

          
          
              
                  dev
                  
                      
                          x.properties
                          y.properties
                      
                  
                  
                      com.mysql.jdbc.Driver
                      jdbc:mysql//localhost:3306/test
                      dev
                      dev-pwd
                  
              
          
          
  3. 查看当前激活的profile

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

    • mvn help:all-profiles

你可能感兴趣的:(maven3)