Maven多模块项目中Telosys代码生成的包路径问题及跨模块需求
Telosys多模块Maven项目代码生成的包路径问题解决办法
问题根源
你遇到的包路径错误,是因为Telosys默认把当前项目根目录作为路径基准,而你的$SRC只设了src/main/java,没包含子模块的前缀(比如service-core/),导致target.javaPackageFromFolder方法找不到正确的源码目录,抛出路径错误。
可行的解决思路
1. 自定义子模块路径变量(快速适配)
直接在Telosys的全局配置里给每个子模块定义根路径变量,然后在模板和生成配置里组合使用:
- 打开父项目的
telosys-tools.cfg,添加子模块变量:# 子模块根路径定义 SERVICE_CORE = service-core DTO_PUBLIC = dto-public API_PUBLIC = api-public - 修改模板里的包路径代码,把
${SRC}换成${SERVICE_CORE}/${SRC}这类组合路径:# service-core模块的模板包声明 package ${target.javaPackageFromFolder(${SERVICE_CORE}/${SRC})}; - 同时在
templates.cfg里更新生成目录:
同理,给dto-public、api-public分别配置对应的模板和目录即可。# 生成service-core的模型类 template : java-model.vm folder : ${SERVICE_CORE}/${SRC}/${ROOT_PKG}/model/ overwrite : true
2. 用Telosys项目组管理(推荐方案)
Telosys自带的项目组功能专门解决多模块场景,不用在每个子模块单独初始化Telosys:
- 在父项目的
.telosys目录下新建projects文件夹,给每个子模块创建独立的配置文件:.telosys/projects/service-core/project.cfg:SRC = service-core/src/main/java ROOT_PKG = com.yourcompany.servicecore.telosys/projects/dto-public/project.cfg:SRC = dto-public/src/main/java ROOT_PKG = com.yourcompany.dtopublic
- 回到父项目的
templates.cfg,给每个生成任务指定对应的项目:# 生成service-core的模型类 template : java-model.vm folder : ${SRC}/${ROOT_PKG}/model/ project : service-core overwrite : true
这样每个生成任务会自动加载对应子模块的# 生成dto-public的DTO类 template : java-dto.vm folder : ${SRC}/${ROOT_PKG}/dto/ project : dto-public overwrite : trueSRC和ROOT_PKG变量,target.javaPackageFromFolder就能正确解析包路径了。
3. 直接硬编码包名(简单粗暴)
如果你的包结构固定,不想折腾路径解析,直接在模板里写死包名:
package com.yourcompany.servicecore.model;
或者用${ROOT_PKG}拼接:
package ${ROOT_PKG}.model;
这种方式跳过路径解析逻辑,直接生成正确的包声明,适合包结构不会频繁变动的场景。
验证步骤
配置完之后,先在Telosys控制台输入variables命令,检查变量值是否正确(比如SERVICE_CORE/${SRC}是否等于service-core/src/main/java),确认没问题再执行代码生成。
内容的提问来源于stack exchange,提问作者Michael Ressler
相关产品推荐
相关产品推荐

