2015-09-20 80 views
2

我正在構建一個maven程序集。該結構是這樣的:在maven程序集中複製文件

src 
    main 
    server 
     app1 
     app2 
     app3 
    client 
     app1 
     app2 
     app3 
    common 
     server.xml 

的組件,使輸出爲:

server.zip 
    app1 
    app2 
    app3 

我想包括在每個適用於應用的輸出文件夾的server.xml。所以我的輸出應該是:

server.zip 
    app1 
    server.xml 
    app2 
    server.xml 
    app3 
    server.xml 

我該怎麼做?

回答

1

您需要複製文件server.xml多次,在assembly.xml中聲明多次。下面是一個示例裝配描述:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>server</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <fileSets> 
     <fileSet> 
      <directory>src/main/server/app1</directory> 
      <outputDirectory>app1</outputDirectory> 
     </fileSet> 
    </fileSets> 
    <files> 
     <file> 
      <source>src/main/common/server.xml</source> 
      <outputDirectory>app1</outputDirectory> 
     </file> 
    </files> 
    <!-- same configuration for app2 and 3 --> 
</assembly> 

如果你想這樣做,在一個循環中(假設你有50個應用程序文件夾),也可以使用Velocity template生成正確的Maven的裝配描述符。調用Velocity完成velocity-maven-plugin

樣品Velocity模板(保存爲src/main/common/assembly-server.xml.vm):

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>server</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <fileSets> 
     #foreach($i in [1..50]) 
     <fileSet> 
      <directory>src/main/server/app$i</directory> 
      <outputDirectory>app$i</outputDirectory> 
     </fileSet> 
     #end 
    </fileSets> 
    <files> 
     #foreach($i in [1..50]) 
     <file> 
      <source>src/main/common/server.xml</source> 
      <outputDirectory>app$i</outputDirectory> 
     </file> 
     #end 
    </files> 
</assembly> 

插件配置:

<plugin> 
    <groupId>com.googlecode.velocity-maven-plugin</groupId> 
    <artifactId>velocity-maven-plugin</artifactId> 
    <version>1.1.0</version> 
    <executions> 
     <execution> 
      <id>generate-server-assembly<id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>velocity</goal> 
      <goals> 
     <execution> 
    </executions> 
    <configuration> 
     <templateFiles> 
      <directory>/src/main/common</directory> 
      <includes> 
       <include>assembly-server.xml.vm</include> 
      </includes> 
     </templateFiles> 
     <removeExtension>.vm</removeExtension> 
    </configuration> 
</plugin> 

這將產生targetassembly-server.xml文件,你可以作爲一個裝配描述符maven-assembly-plugin使用。

+1

循環沒有簡單的概念嗎? – user2230605

+0

@ user2230605不是直接。爲了解決這個問題,我使用了一個Velocity模板來生成正確的Maven程序集。如果你想要一個示例配置,我會更新我的答案。 – Tunaki

+0

謝謝,請更新。我想用它很容易在那裏寫插件。 – user2230605