[英]How to call Java methods in Maven archetype XML
我正在尝试在本地存储库中安装自定义原型。 当用户基于此原型生成项目时,要求他们提供artifactId。 在大多数情况下,它都是小写的。 但是,主要的类名(也就是Java文件名)取决于此artifactId,且首字母大写。 我不要求用户输入另一个变量,而是要调用一些String方法来将artifactId转换为类名的正确格式。
在Maven原型中:修改artifactId ,看起来您可以将Java方法嵌入archetype-metadata.xml中,如下所示:
<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方法的正确方法是什么?
这将大写第一个字母。
<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>
加号字符在此处不能用作字符串连接运算符,也不需要。 只需串联两个替换项(之间没有任何运算符):
<defaultValue>${artifactId.toLowerCase().substring(0,1).toUpperCase()}${actifactId.toLowerCase().substring(1)}</defaultValue>
<defaultValue>
${artifactId.substring(0,1).toUpperCase()}${artifactId.substring(1).toLowerCase()}
</defaultValue>
为我工作,但artifactId来自原型项目,而不是预期的来自我的参数artifactId ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.