【问题标题】:Why does jOOQ suggest to put generated code under "/target" and not under "/src"?为什么 jOOQ 建议将生成的代码放在“/target”下而不是“/src”下?
【发布时间】:2014-10-23 22:52:32
【问题描述】:

查看代码生成器的Maven插件配置的jOOQ example(接近配置的末尾),我看到生成文件的目标目录是target/generated-sources/jooq

既然生成器生成Java代码,你知道为什么这里的建议不是/src的子文件夹,而是一个完全分离的子文件夹吗?这有什么原因吗?这是最佳做法还是什么?

【问题讨论】:

    标签: java sql maven code-generation jooq


    【解决方案1】:

    这是一个很好的问题,should probably also be covered in the jOOQ manual

    这个问题与 jOOQ 并不严格相关,而是与一般的源代码生成相关(例如,当使用 XJC 从 XSD 生成带有 JAXB 注释的 Java 代码时)。有些人喜欢将生成的源代码作为“主要”源代码的一部分,而另一些人则喜欢将其分开。每种方法背后基本上都有以下想法:

    将事物分开(例如目标/生成源)

    • 唯一的“真实来源”是数据库模式。其副本从未以源形式存储,仅以二进制形式存储。
    • 源代码生成成为构建过程中不可或缺的一部分。构建您的应用程序的每个人(开发人员、持续集成)都需要重新生成源代码。这将确保源始终是最新的。

    把东西放在一起(例如 src/main/java)

    • 在数据库架构及其生成的副本之间复制了相同的“真相”。
    • 源代码生成是一个“外部”过程,它不是您构建的一部分。
    • 生成的源代码受版本控制,预计它们是最新的。
    • 在 jOOQ 的情况下,可以监视此类受版本控制的源的数据库更改。

    实际上并没有普遍首选的方式。两者各有优势。

    【讨论】:

    • 很有趣,尤其是“真相”部分。实际上(这是针对 web 应用程序),我试图保持两个附带目标:a)在结帐后让新开发人员的一切工作开箱即用(不需要额外的步骤); b) 让对 Java、Maven 等知识为零的网页设计师的生活尽可能轻松,因此几乎不需要任何帮助(因此丢失/过时的文件不应该破坏他的工作流程)。到目前为止,重复事实似乎是合理的,数据库没有意外更改,但是进行更改的开发人员负责重新生成支持类。
    • 在 Java 中(使用 Maven)我强烈建议通常首选的方法是将生成的源代码保留在存储库之外,而在其他语言中,例如JavaScript (bower/npm) 构建工件是版本化的
    • @ooxi:这两种方法都有令人信服的理由。我不会说一种方式是“通常首选”...这实际上取决于您的构建架构。例如,jOOQ-meta 包括为所有 17 个受支持的 RDBMS 的字典视图/信息模式生成的类。我不希望每个开发者都如此:contributor 设置所有这 17 个 RDBMS 只是为了应用 “普遍首选” 方式来处理生成的源代码 :-) 所以,很明显,jOOQ-meta 生成的源代码是存储库的一部分。
    • @ooxi 有没有办法让 IDE(在我的例子中是 Eclipse)自动将生成的源添加到构建路径中,就像在 POM 中声明的每个源和资源一样,因此不需要人工干预?
    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 2015-10-17
    • 2010-10-26
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多