2013-02-14 67 views
0

我试图利用maven-war-plugin的有用叠加功能。 换句话说,我有一个模板(打包为WAR文件,template-0.0.1.war),其中包含标签文件,css,js和图像。maven-war-plugin overlay和m2e eclipse插件

当我设置template-0.0.1.war为MyApp项目的依赖,我得到含那些在MyApp项目相同的路径覆盖了的template-0.0.1.war所有文件最终myApp.war

这是我想要的行为。

不过,我需要在对myApp的pom.xml的Maven的战争插件的配置介绍:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
     <webResources> 
     <resource> 
      <directory>../path/to/another/dir</directory> 
     </resource> 
     </webResources> 
    </configuration> 
</plugin> 

只要我介绍的插件这样的配置,我获得最终myApp.war与来自template-0.0.1.war和myApp项目的所有文件,但template-0.0.1.war的文件覆盖myApp项目中具有相同路径的文件。

这种行为与我所期望的完全相反。

有人能告诉我我哪里错了吗?

在此先感谢。该解决方案后

编辑发现:

所描述的问题是由于不同的动作的并发:战争的覆盖(其中正常工作)和外部webResources

实际上,外部webResources标记指向模板项目目录:对Maven完全没有用处,但对于“愚弄”m2e eclipse插件并让它看到模板中包含的自定义标记是不可或缺的。

我所采用的解决方案是在我的pom.xml的插件部分引进2个不同的配置文件:称为“”我在其中插入maven-war-pluginwebResources和第二轮廓(称为“标准的第一个“并且默认激活)而不是maven-war-plugin

回答

0

maven war plugin documentation

默认情况下,该项目的源(a.k.a当前构建)首先加入(施加任何覆盖例如之前)。当前版本被定义为没有groupId,artifactId的特殊叠加。如果需要首先应用叠加层,则只需在叠加层之后配置当前的构建。

如果模板中的文件被子WAR中的文件覆盖,则可能需要考虑在覆盖配置中明确排除它们。

这里的文件说,首先应用覆盖什么:

<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
     <overlays> 
     <overlay> 
      <groupId>com.example.projects</groupId> 
      <artifactId>my-webapp</artifactId> 
     </overlay> 
     <overlay> 
      <!-- empty groupId/artifactId represents the current build --> 
     </overlay> 
     </overlays> 
    </configuration> 
    </plugin> 
</plugins> 

+0

您的快速回答非常感谢,但它不解决问题(见我的文章编辑)。只有在昨天晚上,我意识到这个问题是由于不同的行为相互压倒。这是我的罪过,我没有提供完整的信息。抱歉。 – baronKarza 2013-02-15 07:53:49