0

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

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

这是我想要的行为。

但是,我需要在pom.xmlmyApp 中引入 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 项目和 myApp 项目myApp.war中所有文件的最终文件,但覆盖了 myApp 项目中具有相同路径的文件。template-0.0.1.wartemplate-0.0.1.war

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

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

提前致谢。

找到解决方案后编辑:

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

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

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

4

1 回答 1

0

来自Maven 战争插件文档

默认情况下,首先添加项目的源(也就是当前构建)(例如,在应用任何覆盖之前)。当前构建被定义为没有 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>

于 2013-02-14T20:23:51.770 回答