我正在尝试利用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
。
答案 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>