2011-02-10 99 views
0

我們有一個當前產生WAR文件的Maven構建版本(版本2.2.1)。我們的輸出目錄是target/,所以我們最終得到了構建工件target/MyWar.WAR將Maven配置文件與WAR-Packaged產品配合使用

我在我們的POM.xml文件中添加了兩個配置文件,以便於每個需要特定版本的A.xml文件的特定版本「風味」。在中間構建目錄target/MyWar/有3個文件:

A.xml 
A_1.xml 
A_2.xml 

大廈的Maven沒有指定配置文件應使用A.XML,目前它。我想使用maven-antrun-plugin(對於配置文件1)將A.xml替換爲A_1.xml,對於配置文件2,將A.xml替換爲A_2.xml。 (卸下_1和_2後綴。)

這是資料1的執行的例子:

<profile> 
<id>Profile1</id> 
<build> 
... 
    <execution> 
     <id>Profile1-Replace</id> 
     <phase>package</phase> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     <configuration> 
      <tasks> 
       <delete 
        file="${project.build.outputDirectory}/../MyWar/A.xml" /> 
       <copy 
        file="${project.build.outputDirectory}/../MyWar/A_1.xml" 
        tofile="${project.build.outputDirectory}/../MyWar/A.xml" /> 
      </tasks> 
     </configuration> 
    </execution> 
... 
</build> 
</profile> 

這正確地代替了中間目標/ MyWar /目錄中的文件,但由於某種原因,最終WAR那正在製作target確實不是反映了這些變化。

就好像在'包'階段運行太晚了,戰爭已經建成。將階段更改爲'compile'或'test',即前一階段,因爲A.xml文件(和中間構建目錄)甚至還沒有創建。

+1

Maven 2或Maven 1? Maven 2哪個版本?我相信在Maven 2的最新版本中,元素中的插件順序決定了插件在處於相同階段時的運行順序。 – Pace 2011-02-11 01:25:12

+0

Maven 2.2.1,更新了我的問題。 – 2011-02-11 16:23:27

回答

2

我會建議使用過程資源相代替,甚至產生資源,如果你覺得這是一個更適合。作爲最後的手段,使用準備包。但階段是做這種事情的錯誤地方。所有這些修改通常可能直接發生在源代碼樹中。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <webResources> 
     <resource> 
      <directory>A_variant</directory> 
     </resource> 
     </webResources> 
    </configuration> 
    </plugin> 

當然,如果你需要走這條路線:

但是,如果你在一個單獨的目錄做文件操作,那麼你就可以在階段使用maven-war-plugin如下添加它,保留三個目錄並在個人資料中選擇適當的目錄會更簡單。

相關問題