我有几个最初仅在buildSrc中使用的类。但是现在我在子项目A2中也需要它们。

| - rootProject A
    | - buildSrc
    | - subproject A1
    | - subproject A2
  • 选项1.将这些类保留在buildSrc中,然后尝试将implementation(":buildSrc")添加到A2的依赖项中。不幸的是,它没有用。我无法链接到buildSrc,gradle说了类似“项目A中没有'buildSrc'子项目”之类的内容。
  • 选项2。在子项目A2中使用implementation(files("${project.rootDir}/buildSrc/build/classes/"))也不起作用。它可以生成,但是buildArc中的类无法在A2的源中访问。
  • 选项3。好的。让我们在一个新的子项目A3中提取这些类。再一次,失败。 buildSrc不能依赖于A的任何项目。否则,它将是循环依赖项。
  • 选项4。那么,我们可以将其提取到单独的rootProject B中并创建复合构建。在A的settings.gradle.kts中,我放置了includeBuild("B")。再说一次,我可以在A2中将它用作implementation("mygroup:B"),而不能在buildSrc中使用它:Could not find mygroup:B.\n Required by:\n project :

  • 那么,我还有什么选择呢?还是我以前的尝试做错了什么?

    最佳答案

    我相信您可以从Gradle 6.7开始使用选项4
    参见Issue #3768related release notes in v6.7
    “现在,buildSrc可以看到包含的内部版本
    我们建议构建使用专门命名的buildSrc构建来组织命令式和通用构建逻辑。
    有时,您可能还需要在buildSrc自身和根构建之间共享构建逻辑。在以前的版本中,这是不可能的,因为buildSrc无法访问其他包含的内部版本的内部版本逻辑。
    在此发行版中,现在可以在buildSrc和根构建或任何其他包含的构建之间共享构建逻辑。这样可以更轻松地在buildSrc与其他构建之间共享通用的存储库声明或约定,如本示例所示。”

    关于gradle - 如何与buildSrc和子项目之一共享某些类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64600165/

    10-09 04:22