第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Maven 入門教程 Maven 入門教程 Maven 使用 Profile 構(gòu)建

Maven 使用 Profile 構(gòu)建

上一節(jié),我們講到了如何使用 Maven 自動化的進(jìn)行單元測試,那測試通過之后,我們就要進(jìn)行構(gòu)建,并且將構(gòu)建好的程序包,放到對應(yīng)的服務(wù)器上去運行。這個時候,問題就出現(xiàn)了,對于不同環(huán)境,我們需要不同的配置文件,那我們構(gòu)建的之前,就需要將配置文件改為對應(yīng)環(huán)境的配置文件,之后才能進(jìn)行構(gòu)建??偠灾苈闊?,而且,萬一忘記改配置,那么構(gòu)建出來的包就是錯的。

Profile 則讓不同環(huán)境之間可移植性的構(gòu)建成為可能。它使我們在構(gòu)建項目的時候,可以很輕松的在不同環(huán)境中進(jìn)行構(gòu)建,也可以稱之為“開箱即用”。

1. 可移植性

首先,我們來介紹一下可移植性。所謂的可移植性,指的是,在構(gòu)建的過程中,改動配置文件的次數(shù)和范圍越小,則可移植性越強(qiáng),反之,則可移植性越弱。根據(jù)可移植性的不同程度,我們可以將其劃分為如下幾類:

  • 不可移植: 指的是,項目只能在某個特定環(huán)境或者條件下才能構(gòu)建。這種時候,構(gòu)建是不可移植的,當(dāng)然,我們在開發(fā)的過程中,肯定是不想看到這種情況的發(fā)生。

  • 環(huán)境可移植: 指的是,對于不同環(huán)境添加不同的配置,一次構(gòu)建都能夠完成,那么這個構(gòu)建就具備環(huán)境可移植了。即:無需對不同環(huán)境做過多改動,即可完成相應(yīng)構(gòu)建。

  • 全局可移植: 指的是,無論在何種環(huán)境下,開發(fā)者都不需要做任何配置,即可完成對項目的構(gòu)建工作。這個特性對于優(yōu)秀的開源軟件來說,尤其重要。因為這種類型的軟件,往往會由來自各地的開發(fā)者來共同開發(fā)。

在大多數(shù)情況下,我們平時開發(fā)的項目只需要做到環(huán)境可移植就可以了。因為通常的公司往往會有三套環(huán)境,開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境,針對不同的開發(fā)階段,往往需要將項目構(gòu)建到不同的環(huán)境中去,但是由于這些項目通常部署在公司的內(nèi)網(wǎng)環(huán)境中,所以,我們并不需要考慮做到全局可移植性。

2. Maven Profile

在了解了什么是可移植性之后,那我們來看看 Maven 是如何實現(xiàn)可移植性的。這里就需要介紹 Maven 的一組配置 Profile 。通過使用 Profile 我們就可以實現(xiàn)針對不同環(huán)境自定義進(jìn)行構(gòu)建。通常情況下,Profile 被定義在 pom.xml 文件中,但是定義的方式也可以有很多種。

<profiles>
   <profile>
        <id>dev</id>
        <properties>
            <database.driver>com.mysql.cj.jdbc.Driver</database.driver>
            <database.url>jdbc:mysql://localhost:3306/dev</database.url>
            <database.username>Mic</database.username>
            <database.password>Abc123</database.password>
        </properties>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <database.driver>com.mysql.cj.jdbc.Driver</database.driver>
            <database.url>jdbc:mysql://localhost:3306/test</database.url>
            <database.username>Mic</database.username>
            <database.password>Abc123</database.password>
        </properties>
     </profile>
</profiles>

這里我們以數(shù)據(jù)庫連接串為例,可以將不同環(huán)境中的數(shù)據(jù)庫連接串配置到對應(yīng)的 profile 節(jié)點中,并為每個 profile 節(jié)點定義單獨的 id 。配置好之后,我們我們在進(jìn)行構(gòu)建項目的時候,可以在執(zhí)行命令的時候,加上參數(shù) -Pdev 來指定對應(yīng)的配置 :mvn clean package -Pdev。

但是問題來了,通常情況下,我們不會把配置信息放到 pom.xml 文件中,這樣對于我們管理配置,并不方便。那我們?nèi)绾卧跇?gòu)建的時候,指定使用對應(yīng)的配置文件來進(jìn)行構(gòu)建呢?我們可以對 pom.xml 文件進(jìn)行簡單的修改。

<build>
    <finalName>mall-order</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
            	<executable>true</executable>
            </configuration>
        </plugin>
    </plugins>

    <resources>
        <resource>
        	<directory>src/main/resources/</directory>
        	<!-- 打包時,將對應(yīng)配置文件先排除 -->
            <excludes>
            	<exclude>**/*.yml</exclude>
            </excludes>
            <includes>
            <!--如果有其他定義通用文件,需要包含進(jìn)來-->
            </includes>
        </resource>
        <resource>
            <!-- 通過自定義的節(jié)點來激活指定的配置文件 -->
            <directory>src/main/resources/${profile.active}</directory>
        </resource>
    </resources>
</build>

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <!-- 自定義節(jié)點profile.active-->
            <profile.active>dev</profile.active>
        </properties>
        <!--activation用來指定激活方式,可以根據(jù)jdk環(huán)境,環(huán)境變量,文件的存在或缺失-->
        <activation>
            <!-- 表示默認(rèn)激活-->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
        	<profile.active>test</profile.active>
        </properties>
    </profile>
</profiles>

首先,我們定義 resource 節(jié)點用于指定配置文件的目錄,并將最后一級目錄定義成可配置的。然后,跟剛剛類似,我們開始定義 profiles 節(jié)點,只不過這次,我們只是在 properties 節(jié)點中自定義了一個節(jié)點,與 resource 中的自定義路徑相呼應(yīng)。相應(yīng)的,我們需要在 resources目錄下,創(chuàng)建兩個目錄,分別為 dev 和 prod 目錄,用于存放不同的配置文件。

都配置好之后,我們再使用命令 mvn clean package -Pdev 來構(gòu)建項目。構(gòu)建完成后,我們查看目錄target\classes 會發(fā)現(xiàn),application-dev.yml 配置文件被編譯進(jìn)來,而另一個配置文件并沒有被編譯進(jìn)來。這時候,我們的基本上就達(dá)成 了。

注意:由于我們這里配置的 dev Profile 是默認(rèn)激活狀態(tài)的,所以執(zhí)行 mvn clean packagemvn clean package -Pdev 兩個命令的結(jié)果是相同的。

當(dāng)然,通過配置 profile ,我們不僅僅可以指定激活不同的配置文件,也可以指定構(gòu)建使用的JDK版本,以及某些操作系統(tǒng)的參數(shù)。

3. 小結(jié)

本節(jié)中,我們主要介紹了 Maven 的一個屬性,叫做 Profile 。通過配置 Profile 我們可以實現(xiàn)構(gòu)建的環(huán)境可移植性,從而大大簡化我們在構(gòu)建過程中的便捷程度,讓我們從重復(fù)的修改配置的過程中解脫出來。