【问题标题】:How to put Maven-generated sources under version control?如何将 Maven 生成的源代码置于版本控制之下?
【发布时间】:2012-04-25 04:33:12
【问题描述】:

我正在使用 Maven 构建和部署 jOOQ。我现在想开始使用适当的 Maven 插件生成 XJC 生成的类(之前,我使用了 ant 脚本)。这对我来说非常有效,但我担心一些想要在没有 Maven 的情况下自己构建 jOOQ 的用户现在将无法生成那些缺失的源代码。所以我想将这些来源从target/generated-sources/xjc 移出到src/main/java,以便能够将它们置于版本控制之下。

  • 这是一种常见的做法吗?
  • 我该怎么做(我应该使用插件将文件移动到低级别,还是应该将文件直接生成到src/main/java)?
  • 我还有其他选择吗?

请注意,底层 XSD 几乎不会更改,因此我没有在每次构建时生成这些源...

【问题讨论】:

    标签: java maven version-control generated-code


    【解决方案1】:

    也许另一种方法是使用 Maven 程序集插件来压缩所有这些源并将它们公开为版本化的工件。依赖插件将允许您从本地或远程存储库中提取这些源,并确保您拥有这些源的正确版本。

    (在我看来,保持原样。如果 Maven 是您的构建系统,那么每个尝试构建您的代码的人都应该使用它)

    【讨论】:

    • 谢谢,你可能是对的。我没有想过使用 Maven 直接交付源代码并让少数用户使用这种交付方式构建我的产品。
    • 您甚至不需要组装插件 - 标准的 maven jar 构建将包含生成的源代码。我经常使用它来避免 m2e/m2eclipse 地狱:将 xml 模式/生成的 JAXB 源保持在依赖项中,并保持该项目大部分关闭。
    【解决方案2】:

    这是一个糟糕的主意,您永远不应该将生成的源代码放在版本控制中,因为无论它们是从什么生成的都可能发生变化,然后您的代码就会不同步。

    即使 XSD 永远不会改变,请注意我说永远不会,而不是几乎永远不会,正如你所说,这是不同的,我不会将源代码置于版本控制之下。如果 XSD 没有改变,Maven 可以被告知不要每次都生成源代码。

    如果您走 Maven 路线,那么构建您的东西的任何人都应该使用相同的工具链。这不是特定于 Maven 的。如果这是 Ant 或带有 make 文件的 C++ 项目,您也不会想要这样做。

    如果您真的想提供一个 Maven 独立发行版,那么让 Maven 生成它,有很多插件可以将所有工件导出为您可以分发的存档。但是不要因为一些可能不存在的模糊外部要求而牺牲你的构建。

    【讨论】:

    • 好的,我可以在最后一段中看到您的观点。不使用 Maven 的用户确实拥有来自 Maven 交付的源,因此他们可以直接构建这些源。感谢您分享您的想法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多