maven-war-plugin overlay和m2e eclipse插件

时间:2013-02-14 15:23:29

标签: maven-3 m2eclipse m2e maven-war-plugin

我正在尝试利用maven-war-plugin的有用叠加功能。 换句话说,我有一个包含标记文件,css,js和图像的模板(打包为WAR文件,template-0.0.1.war)。

当我将template-0.0.1.war设置为myApp项目的依赖项时,我得到一个最终myApp.war,其中包含myApp项目中具有相同路径的所有template-0.0.1.war文件。< / p>

这是我想要的行为。

但是,我需要在myApp的pom.xml中介绍maven-war-plugin的配置:

<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和myApp项目中所有文件的最终template-0.0.1.war,但template-0.0.1.war的文件会覆盖那些myApp项目中的路径相同。

这种行为恰恰与我的预期相反。

有人可以告诉我哪里错了吗?

提前致谢。

找到解决方案后进行修改:

所描述的问题是由于不同操作的并发性:WAR覆盖(可正常工作)和外部webResources

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

我采用的解决方案是在我的pom.xml的插件部分中引入2个不同的配置文件:第一个名为“ eclipse ”,其中我插入了maven-war-plugin使用webResources和第二个配置文件(默认情况下名为“标准”并默认激活),不包含maven-war-plugin

1 个答案:

答案 0 :(得分: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>