【问题标题】:JHipster Blueprint - Generate files with a specific path using templates | Get default java package nameJHipster Blueprint - 如何获取默认的 Java 包名称路径?
【发布时间】:2022-06-30 03:02:57
【问题描述】:

我正在使用 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,其中包含我生成的文件。

为了在正确的位置生成文件,我需要在 XXX in path: 'src/main/java/XXX/domain/' 中写什么?

我在 github 上对 generator-jhipster 项目进行了一些挖掘,询问用户默认 java 包名称的提示位于 /generator-jhipster/generators/java/index.cjs/ 中。这是整个代码https://github.com/jhipster/generator-jhipster/blob/main/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 常量,它应该可以工作。有什么想法吗?

【问题讨论】:

    标签: javascript jhipster


    【解决方案1】:

    我刚刚找到了解决方案...

    const entityServerFiles = {
        noHibernate: [
            //domain files
            {
                path: 'src/main/java/',
                templates: [
                    {
                        file: 'package/domain/Entity.java',
                        renameTo: generator => `${generator.entityAbsoluteFolder}/domain/${generator.persistClass}.java`
                    }
                ]
            }
        ]
    };
    
    function writeFiles() {
        return {
            write() {
                this.writeFilesToDisk(entityServerFiles, this, false);
            }
        }
    }
    
    module.exports = {
        writeFiles
    };
    

    path 属性指定模板文件夹内的路径。同时,您可以在 renameTo 属性中指定您希望在项目内生成文件的路径。

    所以我的问题的答案是 ${generator.entityAbsoluteFolder} 这与我最初的假设无关,但这个问题对于编写模板也很有用。

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2019-10-14
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多