除src/main/java
文件夹外,我们还有一个文件夹,其中包含主要源所需的一些生成的Java源代码。需要时,可以手动调用代码生成 。生成的源已检查到源仓库中。一切都将被构建和包装在一起。
生成的java 源的最佳位置是什么,它们将与主要源一起编译?应该是:
/src/generated/java
(遵循用于集成测试的src/testInt/java
的相同命名逻辑)/generated-src/main/java
(与&#34相撞; src目录包含构建项目的所有源材料" )/src/main/generated-java
(嗯...... generated-java
不是类型)对于这种情况,第一个选项似乎是最合适的选项。你怎么看? Maven文档中有没有描述这种情况的东西(我忽略了)?你知道任何类似结构的回购吗?
谢谢。
正如@ Absurd-Mind所建议的那样,我们正在考虑的方向是将源分成子模块(在gradle中工作得很好)。因此,生成的源和一些其他相关源将进入其自己的子模块(它们将生成单独的工件),其余的将进入使用此子模块的其他子模块。谢谢。
答案 0 :(得分:35)
我认为位置取决于源的生成和处理方式。
源代码在构建过程中自动生成:然后我会使用target/main/java/
,target/test/java/
等等。此代码未签入CVS,因为您可以非常轻松地重建它。如果您清理项目,将删除target
目录并重建源代码。
源代码由外部工具或类似工具手动生成:我会使用generated/src/main/java/
,generated/src/test/java/
,generated/src/main/resources/
等。应该检查此代码。一个好处是,一旦您看到顶级目录名称为generated
,您就会知道下面的所有文件/目录也会生成。您还可以在顶级目录下拥有标准的maven目录结构。另一点是清理很简单,只需删除generated
并重新创建它,而无需查看许多其他目录(例如:src/main/generated-java
和src / test / generated-java)。
编辑:另一个不错的解决方案是创建一个仅包含myproject-generated-1.0.3.jar
生成的源的maven项目。该项目将是您实际应用程序中的依赖项。然后,您只需将生成的源设置为src/main/java
。
答案 1 :(得分:3)
据我所知,生成的源没有标准的文件夹结构。在我的项目中,我更喜欢src/gen/java
种符号。
答案 2 :(得分:0)
在src/main/java
内的Maven项目源文件存储中,src/main/resources
和src/test/java
内的测试类存储。在Maven中生成(Compile code)代码存储到目标文件夹中。在构建maven项目时,所有生成的代码都要在目标文件夹中更新。
答案 3 :(得分:0)
我完全同意the accepted answer,只想对目录命名提出一点不同的建议:
console.log(this.state.content.match(/(?<=<img src=).*?(?=>)/g));
背景:在 Eclipse / Maven Tycho 世界(代码/资源生成通常起着重要作用)的世界中,有src-gen/main/java
目录用于生成代码,已作为某种标准约定建立。 (由于所有源文件都直接位于src-gen
和src
中,因此默认的项目布局与Maven相比有所不同。
在Maven项目中,例如,可以将其翻译为src-gen
,src-gen/main/java
,src-gen/test/java
。我比将所有内容都移到“生成的”目录中更喜欢,因为
src-gen/test/resources
和src/main/java
中的源在目录树中位于相同的深度src-gen/main/java
包含两个src-gen
提到的所有优点仍然适用(例如,易于清理)关于问题中其他建议的一些想法/意见
generated/src/main/java
之类的东西,而不是/src/main/generated-java
,当按字母顺序对目录进行排序时,它使生成的代码和常规代码彼此相邻(/src/main/java-gen
也是另一种模式在Eclipse项目中使用)<lang>-gen
与gen
相比,更适合src
,it
等简短的正式名称。我已经在野外几次见过generated
,并觉得它比src/gen/java
更常见。另一方面,某些Maven插件使用非常冗长的/src/generated/java
目录,因此,如果您不输入简短的名字,target/generated-sources/<lang>
也可以作为一个选择... 最终,我认为命名没什么大不了,这取决于您的喜好,因为这些都不是正式约定。