如何在自定义Maven Archetype中将Artifact ID转为帕斯卡命名法?
自定义Maven Archetype:用帕斯卡命名法的Artifact ID做类名前缀
实现方案
直接借助Maven Archetype自带的Velocity模板引擎,对artifactId做字符串转换,生成符合要求的类名前缀。
具体操作步骤
修改类模板文件
找到Archetype项目里的模板类(比如src/main/resources/archetype-resources/src/main/java/__package__/Config.java.vm),把类名改成Velocity表达式拼接的形式:public class ${artifactId?replace('-', ' ', 'ALL')?capitalize?replace(' ', '')}Config { // 类的业务代码 }拆解一下这个表达式的作用:
?replace('-', ' ', 'ALL'):把artifactId里的所有-换成空格,比如sms-api变成sms api?capitalize:给每个单词首字母大写,变成Sms Api?replace(' ', ''):去掉空格,最终得到SmsApi
测试生成效果
跑一下Archetype生成项目的命令验证:mvn archetype:generate -DarchetypeGroupId=你的groupId -DarchetypeArtifactId=你的archetypeId -DarchetypeVersion=你的版本 -DgroupId=com.example -DartifactId=sms-api -Dversion=1.0.0-SNAPSHOT生成后去目标目录看,应该能得到
SmsApiConfig.java。(可选)复用转换逻辑
如果多个模板都要用到这个转换,可以在模板里定义个Velocity宏:#macro(toPascalCase $str) $str?replace('-', ' ', 'ALL')?capitalize?replace(' ', '') #end之后在类模板里直接调用宏就行:
public class #toPascalCase($artifactId)Config { // 类内容 }
小提示
- Maven Archetype默认集成了Velocity,不用额外加依赖
- 如果你的
artifactId还有下划线之类的特殊字符,直接在replace里再加个替换规则就行
内容的提问来源于stack exchange,提问作者parsa faraji
相关产品推荐
相关产品推荐

