【问题标题】:How to call Java methods in Maven archetype XML如何在 Maven 原型 XML 中调用 Java 方法
【发布时间】:2017-08-13 14:21:21
【问题描述】:

我正在尝试在我的本地存储库中安装自定义原型。当用户基于此原型生成项目时,他们需要提供 artifactId。大多数时候它都是小写的。但是,主类名(也是 java 文件名)取决于此 artifactId,首字母大写。我不想让用户输入另一个变量,而是想调用一些 String 方法来将 artifactId 转换为正确的类名格式。

Maven archetype: Modify artifactId 中,看起来您可以在archetype-metadata.xml 中嵌入Java 方法,如下所示:

<requiredProperty key="artifactIdWithUnderscore" >
  <defaultValue>${artifactId.replaceAll("-", "_")}</defaultValue>
</requiredProperty>

所以我在我的 archetype-metadata.xml 中做了类似的事情来大写第一个字母。

<requiredProperty key="artifactId" />
<requiredProperty key="serviceName">
   <defaultValue>${artifactId.toLowerCase().substring(0,1).toUpperCase()+actifactId.toLowerCase().substring(1)}</defaultValue>
</requiredProperty>

但是我得到以下解析错误:

SEVERE: Parser Exception: serviceName
org.apache.velocity.runtime.parser.ParseException: Encountered "+artifactId.toLowerCase().substring(1)}" at line 1, column 55.
Was expecting one of:
    "[" ...
    "}" ...

    at org.apache.velocity.runtime.parser.Parser.generateParseException(Parser.java:3679)

在这个原型 xml 中插入 Java String 方法的正确方法是什么?

【问题讨论】:

    标签: java xml maven maven-archetype


    【解决方案1】:

    这里的加号不能用作字符串连接运算符,也不需要。只需连接两个替换(之间没有任何运算符):

    <defaultValue>${artifactId.toLowerCase().substring(0,1).toUpperCase()}${actifactId.toLowerCase().substring(1)}</defaultValue>
    

    【讨论】:

      【解决方案2】:
      <defaultValue>
          ${artifactId.substring(0,1).toUpperCase()}${artifactId.substring(1).toLowerCase()}
      </defaultValue>
      

      对我有用,但 artifactId 来自原型项目,而不是像预期的那样来自我的论点 artifactId...

      【讨论】:

        【解决方案3】:

        这会将第一个字母大写

          <requiredProperty key="artifactId" />
            <requiredProperty key="serviceName">
               <defaultValue>${StringUtils.capitalize("artifactId")}</defaultValue>
            </requiredProperty>
        

        确保包含 Apache commons 依赖项。

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.5</version>
        </dependency>
        

        【讨论】:

        • 它不起作用。我在 pom.xml 中添加了依赖块。然而它没有用。所有serviceNames 都显示为${StringUtils.capitalize("artifactId")},包括类名和文件名
        • 如果您尝试使用 org.apache.commons.lang3.StringUtils 会怎样
        • 还是一样。
        猜你喜欢
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 2016-09-01
        • 2012-02-05
        • 1970-01-01
        • 2010-10-08
        相关资源
        最近更新 更多