如果我在POM中添加以下属性,maven-war-plugin
会正确使用它:
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
但是,如果我添加以下属性,插件会忽略它(生成的WAR具有默认名称,即artifactId-version):
<properties>
<war.warName>${project.artifactId}</war.warName>
</properties>
以下是maven-war-plugin
文档的两个摘录:
warName:
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-plugin
war.warName的版本2.4按预期工作,但我仍然不明白为什么设置project.build.finalName
不起作用。
答案 0 :(得分:3)
问题只是你错误的属性导致user property
通常意味着从这样的命令中使用:
mvn -Dwar.warName=xxx war:war
如果你想在pom文件中使用它,你必须像这样使用它:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>WhatEverYouLike</warName>
</configuration>
</plugin>
...
</plugins>
</build>
...
你不应该在你的pom中使用属性来定义这些东西。最好使用配置标签。
${project.build.finalName}
应该像这样使用:
<project..>
<build>
<finalName>WhatYouLIke</finalName>
..
</build>
</project>
如果您查看maven model,可以看到结构。
${project.build.sourceEncoding}
的使用只是Maven插件中的一个约定,因此您可以定义由大量插件拾取的属性以用于源编码(我必须承认这有点误导)。最初的想法是在maven模型中有一些东西来表示编码,这意味着要改变它,这在目前是不可能的。