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

Maven 屬性與資源過濾

在之前的章節(jié)中,我們已經(jīng)介紹了 Maven 如何使用 Profile 來進(jìn)行構(gòu)建。類似的,對于 Maven 來說,還有很多其他的資源或者屬性,而這些資源或者屬性也都是可以進(jìn)行過濾的,這一小節(jié)中,我們就重點(diǎn)介紹一下在什么情況下,需要過濾這些,并且要如何進(jìn)行操作。

1. 屬性

首先,我們來介紹一下 Maven 的屬性特性。其實(shí),在我們之前的章節(jié)中,一直都有在使用 Maven 的屬性。例如我們在引入 Spring 框架的時候,將 Spring 框架的版本號信息抽象出來,放到 properties 節(jié)點(diǎn)中去,在使用這個版本號的時候,可以通過${}來引用。

<properties>
    <spring.version>4.0.2.RELEASE</spring.version>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

我們都知道抽象了spring.version屬性之后,可以減少我們很多的工作量,而且也便于我們對 pom.xml 文件的管理。在 Maven 的世界中,這只是其中一種屬性。那我們來介紹一下 Maven 的屬性的種類。

  • 內(nèi)置屬性: Maven 的內(nèi)置屬性主要有兩個,一個是${basedir}用來表示項(xiàng)目的根目錄,另一個是${version}用來表示項(xiàng)目的版本號;
  • POM屬性: 用來引用 pom.xml 文件中對應(yīng)元素的值。一般來說,可以用${project.*}來表示,例如:${project.groupId}就是用來表示項(xiàng)目的 groupId 信息;
  • 自定義屬性: 這個比較容易理解,就像我們上面例子中的${spring.version}就屬于自定義屬性的范圍;
  • Settings屬性: 與 POM 屬性類似。通常使用${settings.*}來表示,Settings 屬性用來指向 settings.xml 文件中的屬性,例如:${settings.localrepository}可以用來表示本地倉庫的地址;
  • Java系統(tǒng)屬性: 所有 Java 的系統(tǒng)屬性都可以通過 Maven 屬性來引用。我們在使用之前可以通過mvn help:system命令來查看對應(yīng)的屬性;
  • 環(huán)境變量屬性: 所有的環(huán)境變量屬性都可以通過 Maven 屬性來引用。通常用 ${env.*}來表示。

我們在很多地方都可以用到 Maven 屬性,例如我們的示例項(xiàng)目中,多模塊直接互相引用的時候,我們會用到${project.groupId}${project.version},來管理項(xiàng)目內(nèi)部依賴。會用到${project.basedir}來指定項(xiàng)目配置文件的路徑。

2. Profile

這里就是之前章節(jié)中講到的 Profile ,所以在這里,我們就不做過多的介紹,可以移步到《Maven 使用 Profile 構(gòu)建》一節(jié)進(jìn)行學(xué)習(xí)。

3. 資源過濾

我們使用 Maven 資源過濾的目的和使用 Profile 的目的很大程度上是類似的,就是為了增強(qiáng)項(xiàng)目構(gòu)建的可移植性。之前我們在 Profile 的章節(jié)中,講到了在構(gòu)建項(xiàng)目的時候,激活對應(yīng)的 Profile 來使用對應(yīng)的配置,當(dāng)時我們把配置都放在了配置文件中,因此,如果有多套環(huán)境的話,那么配置文件就相應(yīng)的需要多套。

這里,我們換一種方式來進(jìn)行資源過濾。在講 Profile 的章節(jié)中,我們使用 mall-order 模塊來演示,這次我們換為 mall-delivery 模塊來演示。

首先在 src\main\resources目錄下添加application.yml文件,用作配置文件。文件中的內(nèi)容如下:

spring:
  datasource:
    driver-class-name: ${database.driverClass}
    username: ${database.username}
    password: ${database.password}
    url: ${database.url}
    type: com.alibaba.druid.pool.DruidDataSource

這里,可以看到,我們使用了${}的方式來引用屬性,這個屬性可以定義在pom.xml文件中。

接下來,我們就在pom.xml 文件中配置對應(yīng)的屬性。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

<profiles>
    <profile>
	    <id>dev</id>
    	<properties>
            <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass>
            <database.url>jdbc:mysql://localhost:3306/dev</database.url>
            <database.username>userNameDev</database.username>
            <database.password>passwordDev</database.password>
		</properties>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass>
            <database.url>jdbc:mysql://localhost:3307/test</database.url>
	        <database.username>userNameTest</database.username>
            <database.password>passwordTest</database.password>
        </properties>
        </profile>
</profiles>

通常情況下,資源過濾是關(guān)閉的,如果需要開啟,則需要我們手動設(shè)置 <filtering>true</filtering>。默認(rèn)關(guān)閉也是為了防止在構(gòu)建的過程中發(fā)生一些不必要的過濾情況。

這里,我們分別配置了開發(fā)環(huán)境的數(shù)據(jù)庫信息和測試環(huán)境的數(shù)據(jù)庫信息(其實(shí)也是使用的 Profile 的方式)。其中 properties 節(jié)點(diǎn)配置了我們自定義的屬性,其與我們剛剛在application.yml文件中配置的占位符是一樣的。

接下來,我們進(jìn)行項(xiàng)目構(gòu)建可以指定對應(yīng)的 Profile,執(zhí)行 Maven 命令mvn clean package -Pdev。構(gòu)建完成后,我們可以查看target\classes目錄下的構(gòu)建結(jié)果,會發(fā)現(xiàn)配置文件中的確是用的開發(fā)環(huán)境的 Profile,目的達(dá)成。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: userNameDev
    password: passwordDev
    url: jdbc:mysql://localhost:3306/dev
    type: com.alibaba.druid.pool.DruidDataSource

以上的配置,還可以進(jìn)行一下修改。由于我們平時更多的是在用開發(fā)環(huán)境的配置,因此,我們可以把開發(fā)環(huán)境的配置單獨(dú)放置出來。

<build>
	...
</build>
<properties>
    <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass>
    <database.url>jdbc:mysql://localhost:3306/dev</database.url>
	<database.username>userNameDev</database.username>
    <database.password>passwordDev</database.password>
</properties>

<profiles>
    <profile>
        <id>test</id>
        <properties>
            <database.driverClass>com.mysql.cj.jdbc.Driver</database.driverClass>
            <database.url>jdbc:mysql://localhost:3307/test</database.url>
	        <database.username>userNameTest</database.username>
            <database.password>passwordTest</database.password>
        </properties>
        </profile>
</profiles>

這樣修改之后,我們在進(jìn)行開發(fā)環(huán)境構(gòu)建的時候,不需要添加額外的參數(shù),直接執(zhí)行命令mvn clean package即可正常構(gòu)建。而當(dāng)我們需要構(gòu)建其他環(huán)境程序包的時候,則在命令后面添加對應(yīng)的參數(shù)。

4. 小結(jié)

本文,我們承接《Maven 使用 Profile 構(gòu)建》一節(jié),繼續(xù)介紹 Maven 的屬性和資源過濾,學(xué)了這兩節(jié)之后,能夠更方便,更明晰的管理 pom.xml 文件中的依賴,也讓多環(huán)境構(gòu)建變得更加簡單。