2013-06-03 21 views
4

我正面臨每個配置文件的maven屬性的問題。我有兩個配置文件,每個配置文件具有不同值的屬性'prop.key'。當我撥打mvn clean package -PA -PBmvn clean package -PB -PA時,兩者都使用相同的值'B-1.0-SNAPSHOT'。我使用的是maven 3.0.4。maven每個配置文件相同的屬性

下面我POM:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test.module</groupId> 
    <artifactId>test-module</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <properties> 
     <prop.key>UNKNOWN</prop.key> 
    </properties> 

    <profiles> 
     <profile> 
      <id>A</id> 
      <properties> 
       <prop.key>A-${project.version}</prop.key> 
      </properties> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <version>1.2</version> 
         <executions> 
          <execution> 
           <id>A</id> 
           <phase>package</phase> 
           <configuration> 
            <tasks name="a" description="a-desc"> 
             <echo message="RUN A = ${prop.key}" level="info"/> 
            </tasks> 
           </configuration> 
           <goals> 
            <goal>run</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 

     <profile> 
      <id>B</id> 
      <properties> 
       <prop.key>B-${project.version}</prop.key> 
      </properties> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <version>1.2</version> 
         <executions> 
          <execution> 
           <id>B</id> 
           <phase>package</phase> 
           <configuration> 
            <tasks name="b" description="b-desc"> 
             <echo message="RUN B = ${prop.key}" level="info"/> 
            </tasks> 
           </configuration> 
           <goals> 
            <goal>run</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

我發現'similar topic'但相反的結果! 這是一個錯誤或maven的功能?

感謝您的任何建議和幫助。

回答

3

你可以寫 mvn package -PA,B 的簡稱。

的結果是一樣的: [echo] RUN A = B-1.0-SNAPSHOT[echo] RUN B = B-1.0-SNAPSHOT

這是行家的正確行爲。

一個屬性每次運行只能有一個具體的值。您可以使用配置文件中的版本覆蓋「默認值」。但是,如果您將其重新定義爲兩個配置文件並激活兩個配置文件,則其中一個配置文件「獲勝」。

對於同一個屬性,每個配置文件不可能有一個值。配置文件沒有自己的變量範圍。屬性總是全局的。

+0

Marc von Renteln,坦克你的評論。可以使用過濾和* .properties文件,但它不會對我有幫助。我找到了一個解決方法,它將當前結果複製到目錄中。 –

+0

@Marc,你如何決定哪個配置文件「獲勝」?它是傳遞參數到「-P」還是其他的順序? – Mukund

0

我想你會得到這種行爲,因爲配置文件的最後一個參數被選中。 儘量

mvn clean package -PA,B 

Maven introduction to profiles

可以使用-P CLI選項明確指定配置文件。

該選項採用的參數是用逗號分隔的 profile-id列表。如果指定了此選項,則不會激活其他 以外的配置文件。

相關問題