maven根據不一樣的運行環境,打包不一樣的配置文件

使用maven管理項目中的依賴,很是的方便。同時利用maven內置的各類插件,在命令行模式下完成打包、部署等操做,可方便後期的持續集成使用。java

可是每個maven工程(好比web項目),開發人員在開發時,會使用一種配置文件,好比數據庫配置,而測試環境可能使用另外一種配置文件。web

打包完成後,手動調整配置文件,工做重複度很高,所以查找方法,實現「maven根據不一樣的運行環境,打包不一樣的配置文件」的目的。數據庫

按環境名稱創建配置文件目錄

在src/main/resources目錄下面,按照環境名稱創建配置文件目錄。這裏有兩個環境:test、product。apache

同時發現test、product目錄中的文件和目錄以外的文件基本相同。這是爲了方便開發人員本地開發時本地調試,因此沒有創建dev環境的配置文件目錄。maven

pom.xml中增長插件

主要關注標紅的插件maven-resources-plugin,以及標紅的配置部分。測試

注意:目前通過測試,發現resources目錄文件拷貝會在validation階段以後compile階段以前執行,爲了保證指定環境的配置文件在resources目錄拷貝以後執行,使用compile階段;overwrite設置爲true,強制覆蓋原有文件。ui

使用maven-resources-plugin插件,在compile階段實現指定目錄中配置文件的拷貝操做。url

<build>
    <finalName>Lantech</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!-- 不一樣環境的配置文件選擇 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
              <!-- 覆蓋原有文件 -->
              <overwrite>true</overwrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory> <!-- 也能夠用下面這樣的方式(指定相對url的方式指定outputDirectory) <outputDirectory>target/classes</outputDirectory> --> <!-- 待處理的資源定義 --> <resources> <resource> <!-- 指定resources插件處理哪一個目錄下的資源文件 --> <directory>src/main/resources/${package.environment}</directory> <filtering>false</filtering> </resource> </resources> </configuration> <inherited></inherited> </execution> </executions> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>

pom.xml中增長profiles配置

使用profiles可爲maven命令執行時,激活不一樣的變量,並依據此變量同上述的插件配合,完成指定目錄中配置文件拷貝操做。spa

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <package.environment>dev</package.environment>
        </properties>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <package.environment>test</package.environment>
        </properties>
    </profile>
    <profile>
        <id>product</id>
        <properties>
            <package.environment>product</package.environment>
        </properties>
    </profile>
</profiles>

執行打包命令

mvn clean package
mvn clean package -Pdev
mvn clean package -Ptest
mvn clean package -Pproduct

執行命令,指定-P參數,啓用指定的profile。插件

默認的dev目錄是不存在的,所以原有的配置文件不會被覆蓋。當啓動其餘profile時,會覆蓋原有的文件,實現不一樣環境不一樣配置文件的打包需求。

相關文章
相關標籤/搜索