2010-09-22 46 views
1

我有一個產生webapp.war的maven war項目,以及一個產生skin.zip(一個充滿資源和XML文件的文件)的maven'skin'項目。現在我想將此zip文件添加爲servlet上下文資源(例如WEB-INF/skin.zip)。maven:添加任意文件作爲servlet上下文資源

我試着用疊加,但它擴展的zip文件到WEB-INF,而不是放置有未膨脹的文件:

<plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <configuration> 
      <overlays> 
       <overlay> 
        <groupId>com.mycompany</groupId> 
        <artifactId>skin</artifactId> 

        <type>zip</type> 
        <targetPath>WEB-INF</targetPath> 
       </overlay> 
      </overlays> 
     </configuration> 
    </plugin> 

有什麼辦法,以防止其擴大資源 - 或以某種方式將文件粘貼在那裏(不使用螞蟻插件)。

注:type是完全沒有必要的,也是無益的配置元素 - 它並沒有告訴插件如何擴大神器,如你所期待的 - 它告訴它如何尋找它。例如,如果您將類型從zip更改爲jar,它會抱怨它找不到該工件(可能是最無助的方式)。

回答

2

我試着用疊加,但它的壓縮文件擴展到WEB-INF

是的,這就是做覆蓋,內容解壓到與戰爭的合併。這不正確的工具在你的情況。

有什麼辦法,以防止其擴大資源 - 或者以某種方式將這個文件在那裏

我會用Maven Dependency Plugin及其dependency:copy目標:

  • dependency:copy將獲取插件配置部分中定義的工件列表,並將它們複製到指定位置,重命名它們或根據需要剝離版本。如果這個目標不存在於本地,這個目標可以解決遠程存儲庫中的工件問題。

並將其綁定在prepare-package階段。以下是一些出發點:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>copy-prepare-package</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
       <artifactItem> 
        <groupId>com.mycompany</groupId><!-- or ${project.groupId} --> 
        <artifactId>skin</artifactId> 
        <version>X.Y.Z</version><!-- or ${project.version} --> 
        <type>zip</type> 
       </artifactItem> 
       </artifactItems> 
       <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF</outputDirectory> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

有關更多示例,請參閱Copying specific artifacts

+0

這可以工作,雖然它的下面被複制而不是作爲覆蓋包括在內;任何現在/將來覆蓋感知的IDE插件(我在考慮m2eclipse)不會知道依賴是作爲war文件的一個組成部分 - 因此您可以獲得單獨的deploytime與IDE調試/運行時行爲。 – Justin 2010-09-22 19:52:24

+0

@Justin啊,我明白了。恐怕另一種方法是將你的skin.zip **包含在另一個存檔中,以使覆蓋層正常工作。這是可能的,但。 – 2010-09-22 20:06:05