gpt4 book ai didi

Gradle:在多个子项目中包含相同的 SourceSet

转载 作者:行者123 更新时间:2023-12-03 05:32:57 32 4
gpt4 key购买 nike

如何将单个源集添加到多个子项目?
首先 ...是的,我知道这有多荒谬。这只是我必须做的事情。
设置

  • 该项目使用 Groovy DSL。
  • 有 3 个子项目(A、B、C),每个子项目都有自己独特的主源集。
  • 这些项目之外还有 5 个额外的源集(1、2、3、4、5)。
  • 可以单独编译外部源集的 Nonce。
  • 所有源集都依赖于在每个子项目中定义 3 个不同时间的接口(interface)。
  • 子项目主源不能依赖任何外部源
  • 1和2需要用A、B、C编译。
  • 3需要用A和B编译。
  • 4 需要用 B 和 C 编译
  • 5 只需要用 C 编译。
  • 4 和 5 需要依赖于 2 中定义的类。
  • 5 必须是一个独立的源集,以便它可以作为源集包含在任何 future 可能添加的子项目中。
  • 不允许任何外部源包含来自任何其他源集的源
  • 不允许单独编译任何外部源。
  • 不允许将任何外部源包含为 jar 或项目依赖项;它们必须作为源集包含在内,并且必须为包含它们的每个子项目单独编译。

  • 一种
    sourceSets {
    main {
    java {
    srcDirs = ["src",
    "$rootDir/source_sets/1/src",
    "$rootDir/source_sets/2/src",
    "$rootDir/source_sets/3/src"
    ]
    }
    }
    }
    sourceSets {
    main {
    java {
    srcDirs = ["src",
    "$rootDir/source_sets/1/src",
    "$rootDir/source_sets/2/src",
    "$rootDir/source_sets/3/src",
    "$rootDir/source_sets/4/src"
    ]
    }
    }
    }
    C
    sourceSets {
    main {
    java {
    srcDirs = ["src",
    "$rootDir/interfaces/source_sets/1/src",
    "$rootDir/interfaces/source_sets/2/src",
    "$rootDir/interfaces/source_sets/4/src",
    "$rootDir/interfaces/source_sets/5/src"
    ]
    }
    }
    }
    设置.gradle
    include(":interfaces/A")
    project(":interfaces/A").name = "A"

    include(":interfaces/A")
    project(":interfaces/A").name = "A"

    include(":interfaces/A")
    project(":interfaces/A").name = "A"
    问题是 4 和 5 无法找到 2 中的类,我的 IDE(IntelliJ)无法解析正确的类路径。
    我真正需要的是让外部源集表现得好像它们有 3 个单独的副本,而实际上没有 3 个单独的副本,我需要这样做 没有 使用符号/软链接(soft link)。
    该解决方案只需要使用 gradle,但它可以使用 JetBrains 的“idea”插件进行 gradle,只要它不涉及提交“.idea”文件夹下的任何文件,但它可以包含内联 xml 或资源文件夹中的文件在 .idea 文件夹之外。
    所以是的......这太复杂了,只是......呃!但事实就是如此。

    最佳答案

    确实。

    我没有答案,但这太长了,无法发表评论。所以这里。

    我认为这只是 IntelliJ 的问题,而不是使用 Gradle 编译时的问题,对吧?如果是这种情况,您应该尝试根据需要在 IntelliJ 中为您的项目建模,一旦您找到了一种方法,然后弄清楚如何使用自定义 Idea 插件为您完成它。

    但是,我很确定 IntelliJ 中的多个模块不能共享相同的“内容根”。所以我只看到你不想要的选项 - 要么复制(同步)源与仅用于 IntelliJ 的新文件夹(不允许修改),创建符号链接(symbolic link)(并不总是可移植)或重组您的外部源,以便它们可以独立编译(这可能不容易)

    :-(

    关于Gradle:在多个子项目中包含相同的 SourceSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58290185/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com