【发布时间】:2015-12-19 19:25:55
【问题描述】:
如果我在我的 POM 中添加以下属性,maven-war-plugin 会正确使用它:
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
但是,如果我添加以下属性,插件会忽略它(生成的 WAR 具有默认名称,即 artifactId-version):
<properties>
<war.warName>${project.artifactId}</war.warName>
</properties>
以下是maven-war-plugin 文档的两段摘录:
战争名称:
- 生成的 WAR 的名称。
- 类型:java.lang.String
- 必填:是
- 用户属性:war.warName
- 默认值:${project.build.finalName}
failOnMissingWebXml:
- 如果 web.xml 文件丢失,是否使构建失败。如果您希望在没有 web.xml 文件的情况下构建 WAR,请设置为 false。如果您正在构建没有 web.xml 文件的叠加层,这可能会很有用。
- 类型:布尔值
- 自:2.1-alpha-2
- 必填:否
- 用户属性:failOnMissingWebXml
- 默认:真
(来源:https://maven.apache.org/plugins/maven-war-plugin/war-mojo.html)
为什么failOnMissingWebXml 和war.warName 的行为不同?
另外,如果其他插件可以使用${project.build.sourceEncoding} 的值,为什么maven-war-plugin 不能使用${project.build.finalName} 的值?
<properties>
<!-- plugins use these values correctly -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<failOnMissingWebXml>false</failOnMissingWebXml>
<!-- not "found" by maven-war-plugin -->
<war.warName>${project.artifactId}</war.warName>
<project.build.finalName>${project.artifactId}</project.build.finalName>
</properties>
非常感谢! :)
编辑:由于maven-war-pluginwar.warName 的 2.4 版按预期工作,但我仍然不明白为什么设置 project.build.finalName 不起作用。
【问题讨论】:
-
你使用的是哪个版本的 maven war 插件?
-
哈!我在
中没有任何内容,因此 maven 使用的默认版本是 2.2。我已经强制它使用 2.6 并且正确使用了 war.warName...谢谢。虽然他们的文档应该更新......