2012-02-23 82 views
2

我有一個可配置的屬性line.ending我在我的項目的構建的組裝階段指定了我的應用程序屬性文件的行結束類型。對於我已經創建了兩個配置文件LF_DOSLF_UNIX,所以,當我啓動:在定義maven中的條件配置文件時混淆了這個順序

mvn install 

mvn install -P LF_DOS 

line.ending等於 '做什麼',而當我啓動:

mvn install -P LF_UNIX 

line.ending等於'unix'。

我第一次嘗試這樣做很乾脆:

<profile> 
     <id>LF_UNIX</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <properties> 
      <line.ending>unix</line.ending> 
     </properties> 
    </profile> 
    <profile> 
     <id>LF_DOS</id> 
     <activation> 
      <property> 
       <name>!line.ending</name> 
      </property> 
     </activation> 
     <properties> 
      <line.ending>dos</line.ending> 
     </properties> 
    </profile> 

不幸的是,這總是給我line.ending = DOS,無論LF_UNIX設置與否。奇怪......不過,更多的混亂給我,是我剛剛通過更改個人資料聲明順序,這樣就解決了這個問題:

<profile> 
     <id>LF_DOS</id> 
     <activation> 
      <property> 
       <name>!line.ending</name> 
      </property> 
     </activation> 
     <properties> 
      <line.ending>dos</line.ending> 
     </properties> 
    </profile> 
    <profile> 
     <id>LF_UNIX</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <properties> 
      <line.ending>unix</line.ending> 
     </properties> 
    </profile> 

操作就像我想要的。

我的問題是:這是一個錯誤?或者是否需要了解有關maven配置文件的信息,這種配置文件命令聲明的一種限制在這種情況下尤其重要?

回答

1

混淆在於你理解配置文件激活的工作原理。

你認爲這樣的:

<activation> 
    <property> 
    <name>!line.ending</name> 
    </property> 
</activation> 

如果我沒有名爲「line.ending」集行家屬性意味着,激活此配置文件。如果我沒有在命令行中指定-Dline.ending = X,它意味着什麼,請激活此配置文件。所以除非你運行這樣的東西:

mvn clean install -Dline.ending=unix 

你正在激活此配置文件,因此有值設置爲DOS。

+0

謝謝!我最終得到了同樣的解釋,這要歸功於該文檔:http://docs.codehaus.org/display/MAVENUSER/Profiles,它有效地降低了屬性/缺少屬性的激活只能在命令行中工作(如據我所知,這在Sonatype的開發者參考指南中沒有提到)......一旦你明白它涉及命令行,一切都會變得清晰。即將發佈,但你首先做到了:)。 – Yanflea 2012-02-24 06:02:29

+0

是的,我之前有同樣的問題。我試圖從settings.xml中設置一個屬性並使用它來觸發不同的配置文件。它的工作原理,但只是因爲我碰巧在settings.xml和profiles.xml(maven 2.2.1)中命名配置文件的名字相同,所以它激活了兩個(小心那btw,如果你命名一個配置文件,它將全部激活它們,包括如果你在默認情況下啓用了默認激活狀態,那麼任何名稱都會激活)。我終於明白,激活只適用於-D屬性。然後這一切都變得非常有意義。 – Michael 2012-02-24 13:16:01