Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么jOOQ建议将生成的代码放在/“目标”;而不是",/src";?_Java_Sql_Maven_Code Generation_Jooq - Fatal编程技术网

Java 为什么jOOQ建议将生成的代码放在/“目标”;而不是",/src";?

Java 为什么jOOQ建议将生成的代码放在/“目标”;而不是",/src";?,java,sql,maven,code-generation,jooq,Java,Sql,Maven,Code Generation,Jooq,查看代码生成器的Maven插件配置(在配置末尾附近),我看到生成文件的目标目录是target/generated sources/jooq 由于生成器生成Java代码,您知道为什么这里的建议不是/src的子文件夹,而是一个完全分离的子文件夹吗?这有什么原因吗?这是一个最佳实践还是什么?这是一个很好的问题 这个问题与jOOQ没有严格的关系,而是与一般的源代码生成有关(例如,当使用XJC从XSD生成JAXB注释的Java代码时)。有些人喜欢将生成的源代码作为“主”源代码的一部分,而另一些人则喜欢将其

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


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

这是一个很好的问题

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

将事情分开(例如,目标/生成的源)
  • 唯一的“真相来源”是数据库模式。其副本永远不会以源格式存储,只能以二进制形式存储
  • 源代码生成成为构建的一个组成部分。构建应用程序的每个人(开发人员、持续集成)都需要重新生成源代码。这将确保来源始终是最新的
使事物保持一致(例如src/main/java)
  • 在数据库模式和生成的副本之间复制相同的“真相”
  • 源代码生成是一个“外部”过程,它不是构建的一部分
  • 生成的源代码被置于版本控制之下,在版本控制之下,它们应该是最新的
  • 在jOOQ的情况下,可以监控此类版本控制源的数据库更改

实际上没有一种普遍喜欢的方式。两者都有各自的优点。

有趣,尤其是“真相”部分。事实上(这是针对一个webapp),我试图保持两个附带目标:a)让新开发人员在结帐后一切都开箱即用(无需额外步骤);b) 对于一个对Java、Maven等一无所知的web设计师来说,让生活变得尽可能简单,因此它几乎不需要任何帮助(因此丢失/过期的文件不应该破坏他的工作流程)。到目前为止,复制事实似乎是合理的,数据库并没有意外地发生更改,但进行更改的开发人员负责重新生成支持类。@watery:这很公平。如果您选择该解决方案,在Java(使用Maven)中,我强烈建议通常首选的方法是将生成的源代码保留在存储库之外,而在其他语言(例如JavaScript(bower/npm))中,构建工件是versioned@ooxi:这两种方法都有令人信服的理由。我甚至不会说一种方式是“普遍首选的”。。。这实际上取决于您的构建体系结构。例如,jOOQ meta包含所有17个受支持的RDBMS字典视图/信息模式的生成类。我不希望期望每个开发人员,甚至更多的人:贡献者仅仅为了应用一种“普遍首选”的方式来处理生成的源代码而设置所有这17个RDBMS:-)所以,很明显,jOOQ元生成的源代码是存储库的一部分。@ooxi有没有办法拥有IDE(在我的例子中是Eclipse)自动将生成的源添加到构建路径,就像它对POM中声明的每个源和资源所做的那样,因此不需要手动干预?