gradle找不到其他gradle脚本

gradle找不到其他gradle脚本,gradle,build.gradle,Gradle,Build.gradle,我有一个多项目结构,从我的build.gradle文件中提取了重复代码,并将其放入另一个文件deploy.gradle 我已将deploy.gradle文件放置在common项目中,与build.gradle文件处于同一文件夹级别。文件夹结构如上图所示 在common项目的build.gradle文件中,我可以使用语句引用该文件 /--common /--common/build.gradle /--common/deploy.gradle /--project1 /--project1/bui

我有一个多项目结构,从我的
build.gradle
文件中提取了重复代码,并将其放入另一个文件
deploy.gradle

我已将
deploy.gradle
文件放置在
common
项目中,与
build.gradle
文件处于同一文件夹级别。文件夹结构如上图所示

common
项目的
build.gradle
文件中,我可以使用语句引用该文件

/--common
/--common/build.gradle
/--common/deploy.gradle
/--project1
/--project1/build.gradle
这就像一个梦,而
common
项目构建可以完美地从
deploy.gradle
文件中调用任务

当我试图从其他项目中引用
deploy.gradle
文件时,问题就出现了。当我将
apply…
语句添加到
project1
build.gradle
时,我得到了编译错误

错误:(23,0)无法读取脚本 “C:\path-to-project1-script-file\deploy.gradle”,因为它不存在

因此,Gradle只在
project1
中查找
deploy.Gradle
文件,即使我在
project1
文件中对
common
项目设置了依赖项


问题是如何使
project1
可见
project1
deploy.gradle
中的
project1/build.gradle
示例引用了
common/deploy.gradle

apply from: 'deploy.gradle'

在多项目构建中,区分
projectDir
rootDir
通常很重要
projectDir
是具体的子项目
rootDir
settings.gradle
的所在地。

我们成功地使用了以下项目布局

// import myDeploy task
apply from: "${rootDir}/common/deploy.gradle"

task myProject1Task(dependsOn: 'myDeploy') {
    doLast {
        println 'TRACER myProject1Task'
    }
}
rootproject的
build.gradle
定义

├── a
│   └── build.gradle
├── b
│   └── build.gradle
├── build.gradle
├── gradle-scripts
│   └── deploy.gradle
└── settings.gradle
子项目以这种方式使用
gradle脚本中的脚本

ext.gradleScript = { scriptName ->
    file("${rootProject.projectDir}/gradle-scripts/${scriptName}.gradle")
}
项目的全部内容:

apply from: gradleScript('deploy')

谢谢你,弗兰克。我正在尝试这种方法,但从#a/build.gradle收到一条错误消息,它找不到gradleScript-我是否必须在settings.gradle文件或Intellij项目配置中包含某些内容?我注意到您指定了“${rootProject.projectDir}/”这是否需要在settings.gradle文件中设置为属性/值对,如果需要,我将如何将其指定为相对路径?如果您可以添加演示项目的完整内容和一个示例gradle调用,那么示例将非常有用。您是否将您的项目包括在
设置中。gradle
?嗨,Micheal,谢谢您的回答。我正在尝试这种方法,但在设置rootDir时遇到问题。我的项目似乎只能识别它所在的目录,即当我在common rootDir=common中工作时,或者当我在project1中工作时,然后rootDir=project1-我似乎无法配置项目以识别我所在项目上的级别,因此我无法访问其他项目中的公用目录。您是否有
settings.gradle
文件?我已经在这里发布了我的示例-
$> find . -type f | while read file; do echo "--- $file ---" && cat $file; done
--- ./a/build.gradle ---
apply from: gradleScript('deploy')
--- ./b/build.gradle ---
apply from: gradleScript('deploy')
--- ./build.gradle ---
// Where common build logic is found
ext.gradleScript = { scriptName ->
    file("${rootProject.projectDir}/gradle-scripts/${scriptName}.gradle")
}
--- ./gradle-scripts/deploy.gradle ---
task myDeployTask {
    doLast { println 'common deploy logic goes here' }
}
--- ./settings.gradle ---
include 'a', 'b'

$> gradle -q b:myDeployTask
common deploy logic goes here
$>