Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Gradle 如何与buildSrc和其中一个子项目共享一些类?_Gradle - Fatal编程技术网

Gradle 如何与buildSrc和其中一个子项目共享一些类?

Gradle 如何与buildSrc和其中一个子项目共享一些类?,gradle,Gradle,我有几个类最初只在buildSrc中使用。但现在我在子项目A2中也需要它们 | - rootProject A | - buildSrc | - subproject A1 | - subproject A2 备选案文1。将这些类留在buildSrc中,并尝试将实现(“:buildSrc”)添加到A2的依赖项中。不幸的是,它不起作用。我无法链接到buildSrc,gradle说“项目A中没有‘buildSrc’子项目” 备选案文2。在子项目A2中使用实现(文件(“${

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

| - rootProject A
    | - buildSrc
    | - subproject A1
    | - subproject A2
  • 备选案文1。将这些类留在buildSrc中,并尝试将
    实现(“:buildSrc”)
    添加到A2的依赖项中。不幸的是,它不起作用。我无法链接到buildSrc,gradle说“项目A中没有‘buildSrc’子项目”
  • 备选案文2。在子项目A2中使用
    实现(文件(“${project.rootDir}/buildSrc/build/classes/”)
    也不起作用。它可以构建,但是buildSrc中的类在A2的源代码中是不可访问的
  • 备选案文3。可以让我们在新的子项目A3中提取这些类。这里,再一次,失败。buildSrc不能依赖于A的任何项目。否则它将是一个循环依赖
  • 备选案文4。那么,我们可以将它提取到一个单独的rootProject B并创建复合构建。在A的
    settings.gradle.kts
    中,我放置了
    includebild(“B”)
    。同样,我可以在A2中使用它作为
    实现(“mygroup:B”)
    而不能在buildSrc中使用它:
    找不到mygroup:B。\n需要:\n项目:

那么,我还有什么选择呢?或者可能是我以前的尝试中做错了什么?

我相信从Gradle 6.7开始,您可以使用选项4

看到了吗

“buildSrc现在可以看到包含的构建 我们建议构建使用特别命名的buildSrc build来组织命令式和通用构建逻辑

有时,您可能还需要在buildSrc本身和您的根版本之间共享生成逻辑。在以前的版本中,这是不可能的,因为buildSrc无法从其他包含的生成中访问生成逻辑


在这个版本中,现在可以在buildSrc和根构建或任何其他包含的构建之间共享构建逻辑。这使得在buildSrc和其他构建之间共享公共存储库声明或约定变得更容易,如本示例所示。”

我相信从Gradle 6.7开始,您可以使用选项4

看到了吗

“buildSrc现在可以看到包含的构建 我们建议构建使用特别命名的buildSrc build来组织命令式和通用构建逻辑

有时,您可能还需要在buildSrc本身和您的根版本之间共享生成逻辑。在以前的版本中,这是不可能的,因为buildSrc无法从其他包含的生成中访问生成逻辑


在这个版本中,现在可以在buildSrc和根构建或任何其他包含的构建之间共享构建逻辑。这使得在buildSrc和其他构建之间共享公共存储库声明或约定变得更容易,如本示例所示。”

这是否回答了您的问题?这回答了你的问题吗?我最初使用的是Gradle6.7。但据我所知,这是关于插件的,所以是关于与buildSrc的构建文件和子项目的构建文件共享代码的。但是我需要buildSrc/src和subproject/src中的这些类。可能这是一个bug,我可以创建一个问题吗?将“公共”代码放在它自己单独的构建中,该构建通过组合包含。然后,您应该能够在“anotherProject/buildSrc”或“anotherProject/subProject”中使用“common”。唯一不能使用“common”逻辑的地方是“common/buildSrc”(仅从Gradle 6.7开始),我发誓它不起作用。“anotherProject/buildSrc”生成时出错。可能是我做错了什么?不,那是错的。通过其group:artifact:version引用包含的构建中的工件,就像它来自存储库一样,而不是通过:project name。例如,与您引用spring jars或mockito或外部依赖项时一样,我最初使用的是Gradle 6.7。但据我所知,这是关于插件的,所以是关于与buildSrc的构建文件和子项目的构建文件共享代码的。但是我需要buildSrc/src和subproject/src中的这些类。可能这是一个bug,我可以创建一个问题吗?将“公共”代码放在它自己单独的构建中,该构建通过组合包含。然后,您应该能够在“anotherProject/buildSrc”或“anotherProject/subProject”中使用“common”。唯一不能使用“common”逻辑的地方是“common/buildSrc”(仅从Gradle 6.7开始),我发誓它不起作用。“anotherProject/buildSrc”生成时出错。可能是我做错了什么?不,那是错的。通过其group:artifact:version引用包含的构建中的工件,就像它来自存储库一样,而不是通过:project name。例如,与您引用spring JAR或mockito或外部依赖项相同