maven-war-plugin 忽略用户 属性 war.warName
maven-war-plugin ignores user property war.warName
如果我在我的 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 文件,是否使构建失败。如果您希望 WAR 在没有 web.xml 文件的情况下构建,请设置为 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-plugin
war.warName 的 2.4 版按预期工作,但我仍然不明白为什么设置 project.build.finalName
不起作用。
问题只是你弄错了 属性 因为 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 模型中有一些东西来表示编码,这意味着改变它,这在目前是不可能的。
如果我在我的 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 文件,是否使构建失败。如果您希望 WAR 在没有 web.xml 文件的情况下构建,请设置为 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-plugin
war.warName 的 2.4 版按预期工作,但我仍然不明白为什么设置 project.build.finalName
不起作用。
问题只是你弄错了 属性 因为 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 模型中有一些东西来表示编码,这意味着改变它,这在目前是不可能的。