Maven學習筆記5:Maven屬性、profile和資源過濾

Maven的六類屬性 css

  內置屬性 java

    主要有兩個經常使用內置屬性:${basedir}項目的根目錄(包含pom.xml文件的目錄),${version}項目版本 mysql

  POM屬性 web

    用戶可使用該屬性引用POM文件中對應元素的值,經常使用的POM屬性包括: sql

      ${project.build.sourceDirectory}:項目的主源碼目錄,默認爲src/main/java apache

      ${project.build.testSourceDirectory}:項目的測試源碼目錄,默認爲src/test/java app

      ${project.build.directory}:項目構件輸出目錄,默認爲target/ webapp

      ${project.outputDirectory}:項目主代碼編譯輸出目錄,默認爲target/classes/ maven

      ${project.testOutputDirectory}:項目測試代碼編譯輸出目錄,默認爲target/test-classes/ 測試

      ${project.groupId}:項目的groupId    

      ${project.artifactId}:項目的artifactId  

      ${project.version}:項目的version,與${version}等價

      ${project.build.fianlName}:項目打包輸出文件的名稱。默認爲${project.artifactId}-${project.version}

  自定義屬性

    用戶能夠在POM的<properties>元素下自定義Maven屬性

  Settings屬性

    用戶使用settings.開頭的屬性引用settings.xml文件中XML元素的值

  Java系統屬性

    全部Java系統屬性均可以使用Maven屬性引用

  環境變量屬性

    全部環境變量均可以使用以env.開頭的Maven屬性引用

 

例如:

在依賴中 使用pom變量

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>part-a</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>part-b</artifactId>
        <version>${project-version}</version>
    </dependency>
</dependencies>
在插件中使用pom變量
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <repositoryDirectory>${project.build.directory}/test-reports</repositoryDirectory>
    </configuration>
</plugin>
自定義變量   須要在超級pom 中  過濾 資源文件
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <db.driver>com.mysql.jdbc.Driver</db.driver>
            <db.url>jdbc:mysql://localhost:3360/test</db.url>
            <db.username>username</db.username>
            <db.password>password></db.password>
        </properties>
    </profile>
</profiles>

Maven屬性默認只有在POM中才會被解析,所以須要讓Maven解析資源文件中的Maven屬性。Maven用maven-resources-plugin處理資源文件。它默認的行爲只是將項目主資源文件複製到主代碼編譯輸出目錄中,將測試資源文件複製到測試代碼編譯輸出目錄中。Maven默認的主資源目錄和測試資源目錄的定義是在超級POM中,要爲資源目錄開啓過濾,只要在此基礎上添加一行filtering配置便可。Filtering是maven resource插件的功能,做用是用環境變量,pom文件裏定義的屬性和指定文件裏的屬性替換屬性文件的佔位符。(超級pom在 apache-maven-3.3.9\lib\maven-model-builder-3.3.9.jar\org\apache\maven\model\pom-4.0.0.xml)

1495013624(1)

添加內容:

<resources>
    <resource>
        <directory>${project.basedir}/src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

<testResources>
    <testResource>
        <directory>${project.basedir}/src/test/resources</directory>
        <filtering>true</filtering>
    </testResource>
<testResources>

在src/main/resources目錄下建立jdbc.properties文件:

database.jdbc.driverClass = ${db.driver}

database.jdbc.connectionURL = ${db.url}

database.jdbc.username = ${db.username}

database.jdbc.password = ${db.password}

mvn clean install  -Pdev //-P參數表示在命令行激活一個profile。編譯後在target目錄下jdbc.properties中,在maven配置的屬性就會顯示在jdbc.properties文件中。

Maven支持多種方式激活profile

  1.命令行激活

    用戶可使用mvn命令行參數-P加上profile的id來激活profile,多個id之間以逗號分割。

      mvn clean install -Pdev-x, dev-y

  2.settings文件顯式激活

    用戶但願某個profile默認一直處於激活的狀態,能夠配置settings.xml文件的activeProfiles元素

<settings>

    <activeProfiles>
        <activeProfile>dev-x</activeProfile>
    </activeProfiles>

</settings>

 3.系統屬性激活

    用戶能夠配置檔某系統屬性存在的時候,自動激活profile

<profiles> 
    <profile>
        <activation>
            <property>
                <name>test</name> 
          <value>x</value> //當值爲x的時候激活profile
            </property>
        </activation>
    </profile>
</profiles>

  mvn clean install -Dtest = x

  4.操做系統環境激活

    Profile能夠自動根據操做系統環境激活,若是構建在不一樣的操做系統有差別,用戶徹底能夠將這些差別寫進profile,而後配置它們自動基於操做系統環境激活。  

<profiles>
    <profile>
        <activation>
            <os>
                <name>Windows XP</name>
                <family>Windows</family>
                <arch>x86</arch>
                <version>5.1.2600</version>
            </os>
        </activation>
    </profile>
</profiles>

 5.文件存在與否激活

    Maven可以根據項目中某個文件存在與否來決定是否激活profile

<profiles>
    <profile>
        <activation>
            <file>
                <missing>x.properties</missing>
                <exists>y.properties</exists>
            </file>
        </activation>
    </profile>
</profiles>

 

 6.默認激活

    用戶能夠在定義profile的時候指定其默認激活

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profiles>
</profiles>

查看當前激活的profile  mvn help:active-profiles

列出當前全部的profile      mvn help:all-profiles

profile的種類

  根據具體的須要,能夠在如下位置聲明profile

  pox.xml:只對當前項目有效

  用戶settings.xml:用戶目錄下.m2/settings.xml中的profile對本機上該用戶全部的Maven項目有效

  全局settings.xml:Mavem安裝目錄下conf/settings.xml中的profile對本機上全部的Maven項目有效

  profiles.xml:還能夠在項目根目錄下使用一個額外的profiles.xml文件來聲明profile,不過該特性已經在Maven3中被移除。建議用戶將這類profile移到settings.xml中。

POM中profile可以使用的元素

<project>

  <repositories></repositories>  //修改或添加倉庫

  <pluginRepositories></pluginRepositories>  //修改或添加插件倉庫

  <distributionManagement></distributionManagement>  //修改或添加倉庫部署地址

  <dependencies></dependencies>  //修改或添加項目依賴

  <dependencyManagement></dependencyMangement>  //修改或添加項目依賴

  <modules></modules>  //修改聚合項目的聚合配置

  <properties></properties>  //自由添加或修改Maven屬性

  <reporting></reporting>  //添加或修改項目報告配置

  <build>

    <plugins><plugins>  

    <defaultGoal></defaultGoal>

    <resources></resources>

    <testResources></testResources>

    <finalName></finalName>

  </build>

</project>

Web資源過濾

  在Web項目中,資源文件位於src/main/resources/目錄下,他們經處理後會位於WAR包的WEB-INF/classes目錄下,即這類資源文件在打包事後位於應用程序的classpath中。Web項目中位於src/main/webapp目錄,經打包後位於WAR包的根目錄。這一類資源文件稱做web資源文件,他們在打包事後不位於應用程序的classpath中。web資源默認不會被過濾,所以開啓通常資源文件的過濾也不會影響到web資源文件。

<profiles>
    <profile>
        <id>client-a</id>
        <properties>
            <client.logo>a.jpg</client.logo>
            <client.theme>red</client.theme>
        </properties>
    </profile>
    <profile>
        <id>client-b</id>
        <properties>
            <client.logo>b.jpg</client.logo>
            <client.theme>blue</client.theme>
        </properties>
    </profile>
</profiles>

須要配置maven-war-plugin對src/main/webapp這一web資源目錄開啓過濾

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1-beta-1</version>
    <configuration>
        <webResources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/webapp</directory>
                <includes>
                    <include>**/*.css</include>
                    <include>**/*.js</include>
                </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>
相關文章
相關標籤/搜索