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}會報異常
-
<profiles>
-
<profile>
-
<id>dev</id>
-
<properties>
-
<profile-name>dev</profile-name>
-
</properties>
-
</profile>
-
<profile>
-
<id>test</id>
-
<properties>
-
<profile-name>test</profile-name>
-
</properties>
-
<activation>
-
<activeByDefault>true</activeByDefault>
-
</activation>
-
</profile>
-
<profile>
-
<id>prod</id>
-
<properties>
-
<profile-name>prod</profile-name>
-
</properties>
-
</profile>
-
<profile>
-
<id>pre</id>
-
<properties>
-
<profile-name>pre</profile-name>
-
</properties>
-
</profile>
-
</profiles>
步驟三、編寫filters ,再次強調${profile-name} 是<profile>的properties里的自定義的名字,profiles 必須指定默認激活環境,參看步驟二
-
<build>
-
<filters>
-
<filter>src/main/filters/application_${profile-name}.properties</filter>
-
</filters>
-
...... 省略其它配置
-
<build>
步驟四、在build里添加<resources>,maven打包默認會把src/main/resources下的文件都打包,並且指定是否要開啟filtering,設置為true 會加載filters文件夾下符合要求的文件中的值
-
<resources>
-
<resource>
-
<directory>src/main/resources</directory>
-
<filtering>true</filtering>
-
<excludes>
-
<exclude>src/main/resources/application_backup.properties</exclude>
-
</excludes>
-
</resource>
-
</resources>
步驟五、在build里添加maven打包插件,我使用了maven-assembly-plugin自定義打包插件,它需要自定義一個xml文件,
<descriptor>src/main/assembly/package.xml</descriptor>
-
<plugin>
-
<artifactId>maven-assembly-plugin</artifactId>
-
<version>3.1.0</version>
-
<executions>
-
<execution>
-
<id>make-assembly</id>
-
<phase>package</phase>
-
<goals>
-
<goal>single</goal>
-
</goals>
-
<configuration>
-
<descriptors>
-
<descriptor>src/main/assembly/package.xml</descriptor>
-
</descriptors>
-
</configuration>
-
</execution>
-
</executions>
-
</plugin>
package.xml文件
-
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
-
<id>${profile-name}</id>
-
<formats>
-
<format>zip</format>
-
</formats>
-
<includeBaseDirectory>false</includeBaseDirectory>
-
<fileSets>
-
<fileSet>
-
<directory>${basedir}/src/main/resources/</directory>
-
<includes>
-
<include>application.properties</include>
-
</includes>
-
<outputDirectory>config</outputDirectory>
-
<filtered>true</filtered>
-
</fileSet>
-
<fileSet>
-
<directory>${basedir}/target/</directory>
-
<includes>
-
<include>${project.artifactId}-${project.version}.jar</include>
-
</includes>
-
<outputDirectory>.</outputDirectory>
-
</fileSet>
-
<fileSet>
-
<directory>${basedir}/target/scripts/</directory>
-
<includes>
-
<include>*.sh</include>
-
</includes>
-
<directoryMode>755</directoryMode>
-
<outputDirectory>bin</outputDirectory>
-
</fileSet>
-
<fileSet>
-
<directory>${project.build.outputDirectory}/docs</directory>
-
<includes>
-
<include>*.*</include>
-
</includes>
-
<outputDirectory>docs</outputDirectory>
-
</fileSet>
-
</fileSets>
-
</assembly>
步驟六、打包 -P 指定打包環境,-Dmaven.test.skip=true 跳過測試,不然的話會檢查配置文件是否能正常連接等等,比如會測試zk是否可用啊什么的,如果不可以打包會失敗的。開發環境和線上肯定是隔離的,所以要指定跳過檢查。生成的包在項目目錄下的target文件夾下,mvn package會生成target文件夾 mvn clean會清除target文件夾的內容。
mvn package -P [profile-name] -Dmaven.test.skip=true