JHipster Blueprint:模板生成指定路径文件与获取默认Java包名
JHipster蓝图:如何获取默认Java包名?
编辑说明:原问题为 JHipster Blueprint - How to get default Java package name ?
我正在开发一个重写entity-server子生成器的JHipster蓝图,想要用自定义生成的文件,替换蓝图生成项目里/src/main/java/defaultpackageName/domain/路径下的所有文件,当前使用的files.js代码如下:
const entityServerFiles = { noHibernate: [ //domain files { path: 'src/main/java/XXX/domain/', templates: [ { file: 'Entity.java', renameTo: generator => `${generator.persistClass}.java` } ] } ] }; function writeFiles() { return { write() { this.writeFilesToDisk(entityServerFiles, this, false); } } } module.exports = { writeFiles };
现在运行代码只会在/src/main/java/路径下创建名为XXX的文件夹,把生成的文件存在这个文件夹里。
请问path配置项src/main/java/XXX/domain/里的XXX位置要填什么内容,才能把文件生成到正确的路径下?
我查阅generator-jhipster项目源码发现,询问用户默认Java包名的交互逻辑在/generator-jhipster/generators/java/index.cjs路径下,核心代码片段如下:
const { PACKAGE_NAME, PACKAGE_NAME_DEFAULT_VALUE, PRETTIER_JAVA_INDENT, PRETTIER_JAVA_INDENT_DEFAULT_VALUE, BUILD_TOOL, BUILD_TOOL_DEFAULT_VALUE, BUILD_TOOL_PROMPT_CHOICES, } = require('./constants.cjs'); get prompting() { return { async showPrompts() { if (this.shouldSkipPrompts()) return; await this.prompt( [ { name: PACKAGE_NAME, type: 'input', validate: input => this.validatePackageName(input), message: 'What is your default Java package name?', default: () => this.sharedData.getConfigDefaultValue(PACKAGE_NAME, PACKAGE_NAME_DEFAULT_VALUE), }, ], this.config ); }, }; }
按照我的理解,只要在蓝图里访问PACKAGE_NAME常量就能实现需求,具体要怎么操作?
解决方案
你不需要硬编码XXX的固定值,JHipster生成器实例本身已经内置了包名转路径的处理逻辑,直接用生成器自带的属性替换占位符即可,具体改法如下:
- 首先把path配置里的静态路径改成动态返回的形式,不要写死字符串:
const entityServerFiles = { noHibernate: [ //domain files { path: generator => `src/main/java/${generator.packageFolder}/domain/`, templates: [ { file: 'Entity.java', renameTo: generator => `${generator.persistClass}.java` } ] } ] };
- 这里的
generator.packageFolder就是JHipster自动把用户输入的包名(比如com.mycompany.myapp)转换成路径格式(com/mycompany/myapp)的内置属性,不需要你自己手动导入常量、替换.为/。 - 如果你确实需要拿到原始的包名字符串(比如要写文件里的package声明),直接访问
generator.packageName就能拿到用户配置的完整包名,不需要单独引入PACKAGE_NAME常量去读配置。 - 额外注意:如果你重写的子生成器没有继承java生成器的逻辑,要确认你的蓝图生成器配置里加了对java生成器的依赖,保证
packageName和packageFolder属性在执行writeFiles阶段已经被正确赋值,否则会出现undefined的问题。
内容的提问来源于stack exchange,提问作者Hervé Labrie-Durand
相关产品推荐
相关产品推荐

