maven profiles多環境配置


maven profiles多環境配置

今天做了一個小項目,需要配置開發、測試、預發布、生產四套環境配置文件,正常是用配置中心的,但是我的項目還沒上線,所以想下maven的profiles+filters,我看了下官網對profiles的介紹,官網profiles地址,一個字,累。

開始吧,要想實現多環境打包,總共分6步

步驟一、在src/main 下創建filters文件夾,maven文件目錄結構里建議有filters文件夾(感興趣的可以自己查下maven文件結構),這個和filters配合使用

步驟二、編寫profiles, 這里需要說明兩點 1:<properties>節點里的名字[profile-name] 這個可以自己定義,后面的<filter>節點要用到

     2:  <activation><activeByDefault>true</activeByDefault></activation> 默認激活環境,一定要有,不然${profile-name}會報異常

  1.  
    <profiles>
  2.  
    <profile>
  3.  
    <id>dev</id>
  4.  
    <properties>
  5.  
    <profile-name>dev</profile-name>
  6.  
    </properties>
  7.  
    </profile>
  8.  
    <profile>
  9.  
    <id>test</id>
  10.  
    <properties>
  11.  
    <profile-name>test</profile-name>
  12.  
    </properties>
  13.  
    <activation>
  14.  
    <activeByDefault>true</activeByDefault>
  15.  
    </activation>
  16.  
    </profile>
  17.  
    <profile>
  18.  
    <id>prod</id>
  19.  
    <properties>
  20.  
    <profile-name>prod</profile-name>
  21.  
    </properties>
  22.  
    </profile>
  23.  
    <profile>
  24.  
    <id>pre</id>
  25.  
    <properties>
  26.  
    <profile-name>pre</profile-name>
  27.  
    </properties>
  28.  
    </profile>
  29.  
    </profiles>

步驟三、編寫filters ,再次強調${profile-name} 是<profile>的properties里的自定義的名字,profiles 必須指定默認激活環境,參看步驟二

  1.  
    <build>
  2.  
    <filters>
  3.  
    <filter>src/main/filters/application_${profile-name}.properties</filter>
  4.  
    </filters>
  5.  
    ...... 省略其它配置
  6.  
    <build>

步驟四、在build里添加<resources>,maven打包默認會把src/main/resources下的文件都打包,並且指定是否要開啟filtering,設置為true 會加載filters文件夾下符合要求的文件中的值

  1.  
    <resources>
  2.  
    <resource>
  3.  
    <directory>src/main/resources</directory>
  4.  
    <filtering>true</filtering>
  5.  
    <excludes>
  6.  
    <exclude>src/main/resources/application_backup.properties</exclude>
  7.  
    </excludes>
  8.  
    </resource>
  9.  
    </resources>

步驟五、在build里添加maven打包插件,我使用了maven-assembly-plugin自定義打包插件,它需要自定義一個xml文件,

<descriptor>src/main/assembly/package.xml</descriptor> 
  1.  
    <plugin>
  2.  
    <artifactId>maven-assembly-plugin</artifactId>
  3.  
    <version>3.1.0</version>
  4.  
    <executions>
  5.  
    <execution>
  6.  
    <id>make-assembly</id>
  7.  
    <phase>package</phase>
  8.  
    <goals>
  9.  
    <goal>single</goal>
  10.  
    </goals>
  11.  
    <configuration>
  12.  
    <descriptors>
  13.  
    <descriptor>src/main/assembly/package.xml</descriptor>
  14.  
    </descriptors>
  15.  
    </configuration>
  16.  
    </execution>
  17.  
    </executions>
  18.  
    </plugin>

package.xml文件

  1.  
    <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  2.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.  
    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  4.  
    <id>${profile-name}</id>
  5.  
    <formats>
  6.  
    <format>zip</format>
  7.  
    </formats>
  8.  
    <includeBaseDirectory>false</includeBaseDirectory>
  9.  
    <fileSets>
  10.  
    <fileSet>
  11.  
    <directory>${basedir}/src/main/resources/</directory>
  12.  
    <includes>
  13.  
    <include>application.properties</include>
  14.  
    </includes>
  15.  
    <outputDirectory>config</outputDirectory>
  16.  
    <filtered>true</filtered>
  17.  
    </fileSet>
  18.  
    <fileSet>
  19.  
    <directory>${basedir}/target/</directory>
  20.  
    <includes>
  21.  
    <include>${project.artifactId}-${project.version}.jar</include>
  22.  
    </includes>
  23.  
    <outputDirectory>.</outputDirectory>
  24.  
    </fileSet>
  25.  
    <fileSet>
  26.  
    <directory>${basedir}/target/scripts/</directory>
  27.  
    <includes>
  28.  
    <include>*.sh</include>
  29.  
    </includes>
  30.  
    <directoryMode>755</directoryMode>
  31.  
    <outputDirectory>bin</outputDirectory>
  32.  
    </fileSet>
  33.  
    <fileSet>
  34.  
    <directory>${project.build.outputDirectory}/docs</directory>
  35.  
    <includes>
  36.  
    <include>*.*</include>
  37.  
    </includes>
  38.  
    <outputDirectory>docs</outputDirectory>
  39.  
    </fileSet>
  40.  
    </fileSets>
  41.  
    </assembly>

步驟六、打包 -P 指定打包環境,-Dmaven.test.skip=true 跳過測試,不然的話會檢查配置文件是否能正常連接等等,比如會測試zk是否可用啊什么的,如果不可以打包會失敗的。開發環境和線上肯定是隔離的,所以要指定跳過檢查。生成的包在項目目錄下的target文件夾下,mvn package會生成target文件夾  mvn clean會清除target文件夾的內容。

mvn package -P [profile-name] -Dmaven.test.skip=true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM