maven目录结构生成的源文件的位置

时间:2014-04-07 12:49:03

标签: java maven gradle directory-structure

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中工作得很好)。因此,生成的源和一些其他相关源将进入其自己的子模块(它们将生成单独的工件),其余的将进入使用此子模块的其他子模块。谢谢。

4 个答案:

答案 0 :(得分:35)

我认为位置取决于源的生成和处理方式。

  1. 源代码在构建过程中自动生成:然后我会使用target/main/java/target/test/java/等等。此代码未签入CVS,因为您可以非常轻松地重建它。如果您清理项目,将删除target目录并重建源代码。

  2. 源代码由外部工具或类似工具手动生成:我会使用generated/src/main/java/generated/src/test/java/generated/src/main/resources/等。应该检查此代码。一个好处是,一旦您看到顶级目录名称为generated,您就会知道下面的所有文件/目录也会生成。您还可以在顶级目录下拥有标准的maven目录结构。另一点是清理很简单,只需删除generated并重新创建它,而无需查看许多其他目录(例如:src/main/generated-java和src / test / generated-java)。

  3. 编辑:另一个不错的解决方案是创建一个仅包含myproject-generated-1.0.3.jar生成的源的maven项目。该项目将是您实际应用程序中的依赖项。然后,您只需将生成的源设置为src/main/java

答案 1 :(得分:3)

据我所知,生成的源没有标准的文件夹结构。在我的项目中,我更喜欢src/gen/java种符号。

答案 2 :(得分:0)

src/main/java内的Maven项目源文件存储中,src/main/resourcessrc/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-gensrc中,因此默认的项目布局与Maven相比有所不同。

在Maven项目中,例如,可以将其翻译为src-gensrc-gen/main/javasrc-gen/test/java。我比将所有内容都移到“生成的”目录中更喜欢,因为

  • src-gen/test/resourcessrc/main/java中的源在目录树中位于相同的深度
  • 更清楚的是src-gen/main/java包含两个
    a)有助于构建的资源/资源和
    b)生成的东西 另一方面,名为“ generate”的文件夹可以是任何东西。
  • src-gen提到的所有优点仍然适用(例如,易于清理)
  • 在Google进行快速搜索后,看起来Github上已经存在使用此模式的项目

关于问题中其他建议的一些想法/意见

  • 我可能宁愿使用generated/src/main/java之类的东西,而不是/src/main/generated-java,当按字母顺序对目录进行排序时,它使生成的代码和常规代码彼此相邻(/src/main/java-gen也是另一种模式在Eclipse项目中使用)
  • 在我看来,<lang>-gengen相比,更适合srcit等简短的正式名称。我已经在野外几次见过generated,并觉得它比src/gen/java更常见。另一方面,某些Maven插件使用非常冗长的/src/generated/java目录,因此,如果您不输入简短的名字,target/generated-sources/<lang>也可以作为一个选择...

最终,我认为命名没什么大不了,这取决于您的喜好,因为这些都不是正式约定。