Maven屬性、profile和資源過濾


Maven的六類屬性

  內置屬性

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

  POM屬性

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

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

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

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

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

      ${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屬性引用

<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>
<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>
<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文件里定義的屬性和指定文件里的屬性替換屬性文件的占位符。

<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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM