2012-03-14 46 views
1

我正在嘗試讓我的項目自動構建兩個不同版本的項目。我所做的是我已經添加了兩個不同的插件執行如下沒有配置文件的多個src/main/resources文件夾(我希望一次構建多個版本)

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <executions> 
       <execution> 
        <phase>compile</phase> 
        <goals> 
         <goal>exploded</goal> 
        </goals> 
       </execution>     
      </executions> 
      <configuration> 
       <resources> 
        <resource> 
        <directory>src/main/resources/first</directory> 
        </resource> 
       </resources> 
       <webappDirectory>${webappDirectory}</webappDirectory> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <executions> 
       <execution> 
        <phase>compile</phase> 
        <goals> 
         <goal>war</goal> 
        </goals> 
       </execution>     
      </executions> 
      <configuration> 
       <resources> 
        <resource> 
         <directory>src/main/resources/second</directory> 
        </resource> 
       </resources> 
       <webappDirectory>${project.build.directory}/deployment</webappDirectory> 
      </configuration> 
     </plugin> 

它建立既webappDirectories和它創造的戰爭文件預期,但資源沒有得到正確的包括(但似乎忽略上面的資源定義)。

我猜測它是因爲我在錯誤的階段這樣做,我需要在哪個階段重寫默認資源目錄?

(請注意,我不希望有兩個不同的配置文件,我想有兩個做一次)

+0

我寧願使用'package'階段。但是資源在'compile'之前處理,所以我不知道爲什麼沒有正確嵌入。 – 2012-03-14 16:26:24

回答

4

我已經寫了blog entry exactly有關問題,但本質是即將有Maven項目(在具有以下結構的情況下,戰爭模塊):

. 
|-- pom.xml 
`-- src 
    |-- main 
    | |-- java 
    | |-- resources 
    | |-- environment 
    | | |-- test 
    | | | `-- database.properties 
    | | |-- qa 
    | | | `-- database.properties 
    | | `-- production 
    | |  `-- database.properties 
    | `-- webapp 

最重要的是,像這樣的配置創建通過maven-assembly-plugin不同的配置:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>test</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <descriptors> 
      <descriptor>${project.basedir}/src/main/assembly/test.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </execution> 
     <execution> 
     <id>qa</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <descriptors> 
      <descriptor>${project.basedir}/src/main/assembly/qa.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </execution> 
     <execution> 
     <id>production</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <descriptors> 
      <descriptor>${project.basedir}/src/main/assembly/production.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

你還需要的是assembly descriptors類似如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 

    <id>test</id> 
    <formats> 
    <format>war</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <unpack>true</unpack> 
     <useProjectArtifact>true</useProjectArtifact> 
    </dependencySet> 
    </dependencySets> 
    <fileSets> 
    <fileSet> 
     <outputDirectory>WEB-INF</outputDirectory> 
     <directory>${basedir}/src/main/environment/test/</directory> 
     <includes> 
     <include>**</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

當然,你必須相應地他們的名字,顯然你必須改變描述符中的目錄中。基於此,現在可以在封裝週期中創建具有不同配置的多個工件(在您的案例中爲戰爭文件)。

mvn clean package 

最後我建議不要使用src /主/資源文件夾,使該文件夾應該用於生產信息不爲不同的配置變化:所以你只需通過撥打你的項目構建。此外,src/test/resources將用於測試資源。

+0

非常感謝你的回答:) – JustDanyul 2012-03-14 17:35:23

相關問題