从Maven Archetype生成项目时如何自动更新pom内main class引用
问题原因
使用maven archetype:create-from-project从现有项目生成Archetype时,默认不会自动识别pom文件中硬编码的主类路径,不会自动将其替换为Archetype内置变量,因此后续生成衍生项目时会沿用原项目的主类路径。
解决方法
一次性修改当前自定义Archetype
- 找到执行
create-from-project后生成的Archetype源码目录,默认路径为原项目的target/generated-sources/archetype。 - 进入路径
src/main/resources/archetype-resources,找到模板文件pom.xml。 - 将pom中硬编码的主类配置替换为Archetype内置变量拼接形式,示例如下:
原配置:
替换后配置:<mainClass>com.my_company.artifact_a.Application</mainClass><!-- 若主类路径与Archetype自动生成的包路径一致,推荐使用${package}变量,适配所有自定义包名场景 --> <mainClass>${package}.Application</mainClass> <!-- 若你的包路径固定为groupId+artifactId的组合,也可以使用以下写法 --> <!-- <mainClass>${groupId}.${artifactId}.Application</mainClass> --> - 在Archetype源码根目录执行
mvn install,将修改后的Archetype安装到本地仓库,后续用该Archetype生成项目时主类路径会自动同步更新。
永久生效配置(后续生成Archetype无需手动修改模板)
在原项目根目录新建archetype.properties文件,添加以下配置,确保生成Archetype时自动对pom文件的主类路径做变量替换:
# 指定需要做变量替换的文件后缀,默认已包含xml,可按需补充 archetype.filteredExtensions=xml,java,yml,properties
生成Archetype后自动生成的pom模板就会支持变量替换,无需手动修改。
注意事项
- 修改Archetype后建议升级版本号,避免Maven使用本地缓存的旧版本Archetype生成项目。
- 若你的主类存放路径和根包路径不一致,只需调整变量后的路径后缀即可,比如主类放在根包下的bootstrap子包,就写
${package}.bootstrap.Application。
内容的提问来源于stack exchange,提问作者jrsall92
相关产品推荐
相关产品推荐

