Gradle:将包含buildscript的项目作为子项目

Gradle:将包含buildscript的项目作为子项目,gradle,Gradle,我有以下问题:有一个项目有自己的buildscript部分: buildscript { repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } 当我将其作为子项目包含到另一个项目中(也有类似的buildscript部分)时,我得到以下错

我有以下问题:有一个项目有自己的buildscript部分:

buildscript {
    repositories {
        mavenCentral()
    }   
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
    }   
}
当我将其作为子项目包含到另一个项目中(也有类似的buildscript部分)时,我得到以下错误:

* What went wrong: A problem occurred evaluating project ':blablabla'.
> Cannot change dependencies of configuration ':blablabla:classpath' after it has been resolved.
此构建脚本对于这两个场景都是必需的,因为我需要让两个场景正常工作:

  • 当它们都可以独立建造时
  • blabla
    被视为第一个项目的子项目时
  • 所以,问题是如何覆盖(或禁用)包含在其中的项目的buildscript部分

    编辑

    我有以下配置:

    // mainProject's build.gradle
    
    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        }
    }
    
    plugins {
        id 'org.jetbrains.intellij' version "0.0.36"
    }
    
    // Some other irrelevant stuff
    
    blabla
    s
    build.gradle

    // subProject's build.gradle
    
    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        }
    }
    
    plugins {
        id 'org.jetbrains.intellij' version "0.0.36"
    }
    
    // Some other irrelevant stuff
    
    include ':some-subproject'
    
    settings.gradle

    // settings.gradle
    
    include ":subProject"
    

    经过一段时间的深入研究,最终找到了可行的解决方案:只需有条件地检查当前项目是否被作为根项目调用,就可以简单地切断子项目中的
    buildscript
    部分:

    if (project == rootProject) {
      buildscript { 
        // ...
      }
    }
    

    要使父项目生成某个子项目,需要进行2次更改

    在父项目的
    build.gradle
    文件中

    dependencies {
        ...
        compile project(':some-subproject')
        ...
    }
    
    在父项目的
    设置中。gradle

    // subProject's build.gradle
    
    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        }
    }
    
    plugins {
        id 'org.jetbrains.intellij' version "0.0.36"
    }
    
    // Some other irrelevant stuff
    
    include ':some-subproject'
    

    您是如何将project2作为project1的子项目包括进来的?正确:在
    设置中。gradle
    我是这样做的:
    包括:blablabla
    您能提供一个重现问题的例子吗?@Opal添加到帖子中。目录结构是什么样的?