maven-war-plugin将目录覆盖到最终工件

时间:2017-04-20 21:10:38

标签: maven-3

我们正在使用maven-3.3.9和maven-war-plugin来制作我的最后一场战争。我们在更改静态文件时遇到问题,因为浏览器正在使用缓存版本。

因此我们决定在引用那些静态文件后不使用查询字符串版本属性。我们的选择是生成静态文件目录,覆盖maven-war-plugin在Adding and Filtering External Web Resources文档中的状态,覆盖默认目标目录

以下是我们如何做到的:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <warSourceDirectory>src/main/webapp</warSourceDirectory>
        <webResources>
            <webResource>
                <directory>src/main/webapp/WEB-INF/resources</directory>
                <targetPath>WEB-INF/resources/${parsedVersion.majorVersion}${parsedVersion.minorVersion}${parsedVersion.incrementalVersion}${buildNumber}</targetPath>
                <filtering>true</filtering>
            </webResource>
        </webResources>
    </configuration>
</plugin>

我们还使用其他插件来解析项目版本和编号修订,但它们对这个问题并不重要。

问题是静态文件目录是按照我们的预期正确创建的,但其内容也是以常规方式创建的,就像我们没有使用webResources指令一样,所以我得到了我的资源内容目录两次。我得到了我想要的目录的资源目录,而第二个目录内的所有目标也都是资源目录,作为它的sibbling。如何生成资源目录,而不是重复其内容?

我的最终输出如下:

|--- resources
    |--- js
    |--- css
    |--- fonts
    |--- js
    |--- myoverridendir
        |--- js
        |--- css
        |--- fonts
        |--- js

1 个答案:

答案 0 :(得分:0)

因为同一文件夹来自两个资源目录

  1. 通过src/main/webapp原样warSourceDirectory
  2. webResources
  3. 中指定为资源

    由于您只需要一份来自webResources的副本,因此需要排除来自src/main/webapp的副本。可以使用<warSourceExcludes>标记完成。

    例如,假设jssrc/main/webapp文件夹中的一个此类文件夹。可以使用<warSourceExcludes>js/</warSourceExcludes>

    排除它