首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maven-war-plugin忽略用户属性war.warName

maven-war-plugin忽略用户属性war.warName
EN

Stack Overflow用户
提问于 2015-12-19 19:25:55
回答 1查看 3.8K关注 0票数 3

如果我在POM中添加了以下属性,maven-war-plugin将正确使用它:

代码语言:javascript
复制
<properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

但是,如果我添加以下属性,插件将忽略它(生成的WAR具有默认名称,即artifactId-version):

代码语言:javascript
复制
<properties>
    <war.warName>${project.artifactId}</war.warName>
</properties>

以下是maven-war-plugin文档的两个摘录:

warName:

  • 所产生的战争的名称。
  • 类型: java.lang.String
  • 要求:是
  • 用户属性:war.warName
  • 默认情况:${project.build.finalName}

failOnMissingWebXml:

  • 如果缺少web.xml文件,是否会导致生成失败。如果希望在没有web.xml文件的情况下构建WAR,则设置为false。如果您正在构建一个没有web.xml文件的覆盖层,这可能会很有用。
  • 类型:布尔型
  • 自:2.1-α-2
  • 要求:否
  • 用户属性:failOnMissingWebXml
  • 默认值: true

(资料来源:https://maven.apache.org/plugins/maven-war-plugin/war-mojo.html)

为什么failOnMissingWebXmlwar.warName之间的行为不同?

另外,如果其他插件可以使用值${project.build.sourceEncoding},为什么maven-war-plugin不能使用${project.build.finalName}的值?

代码语言:javascript
复制
<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不能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-19 21:10:23

问题很简单,您弄错了属性,因为user property通常由命令使用,如下所示:

代码语言:javascript
复制
mvn -Dwar.warName=xxx war:war

如果您喜欢在pom文件中使用它,您必须像这样使用它:

代码语言:javascript
复制
  <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}应该像这样使用:

代码语言:javascript
复制
<project..>
  <build>
    <finalName>WhatYouLIke</finalName>
    ..
  </build>
</project>

如果您查看maven模型,可以看到该结构。

在Maven插件中,${project.build.sourceEncoding}的使用只是一种惯例,因此您可以定义这个属性,该属性由大量插件获取,用于源代码编码(我不得不承认,这有点误导)。最初的想法是在maven模型中有一些东西来表示编码,这意味着要改变它,这在目前是不可能的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34374493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档