gradle无法找到其他gradle脚本

时间:2017-12-07 18:01:49

标签: gradle build.gradle

/--common
/--common/build.gradle
/--common/deploy.gradle
/--project1
/--project1/build.gradle

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

我已将deploy.gradle文件放入common项目中与build.gradle文件相同的文件夹级别。文件夹结构如上所示。

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

apply from: 'deploy.gradle'

这就像一个梦想,common项目构建完美地调用deploy.gradle文件中的任务。

当我尝试从其他项目之一引用deploy.gradle文件时出现问题。当我将apply...语句添加到build.gradle的{​​{1}}时,我收到了编译错误,

  

错误:(23,0)无法读取脚本   ' C:\路径到PROJECT1脚本文件\ deploy.gradle'因为它不存在。

所以Gradle只在project1中查找deploy.gradle文件,即使我在project1 common文件中设置了project1项目的相关性。

问题是如何将build.gradle项目deploy.gradle显示为common

2 个答案:

答案 0 :(得分:1)

以下是引用project1/build.gradle的示例common/deploy.gradle

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

task myProject1Task(dependsOn: 'myDeploy') {
    doLast {
        println 'TRACER myProject1Task'
    }
}

在多项目构建中区分projectDirrootDir通常很重要。 projectDir是具体的子项目; rootDirsettings.gradle生活的地方。

答案 1 :(得分:0)

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

├── a
│   └── build.gradle
├── b
│   └── build.gradle
├── build.gradle
├── gradle-scripts
│   └── deploy.gradle
└── settings.gradle

根项目build.gradle定义

ext.gradleScript = { scriptName ->
    file("${rootProject.projectDir}/gradle-scripts/${scriptName}.gradle")
}

子项目以gradle-scripts这种方式使用脚本

apply from: gradleScript('deploy')

项目的全部内容:

$> 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
$>