如果我在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不能工作。
发布于 2015-12-19 21:10:23
问题很简单,您弄错了属性,因为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模型,可以看到该结构。
在Maven插件中,${project.build.sourceEncoding}的使用只是一种惯例,因此您可以定义这个属性,该属性由大量插件获取,用于源代码编码(我不得不承认,这有点误导)。最初的想法是在maven模型中有一些东西来表示编码,这意味着要改变它,这在目前是不可能的。
https://stackoverflow.com/questions/34374493
复制相似问题