首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gradle找不到其他gradle脚本

gradle找不到其他gradle脚本
EN

Stack Overflow用户
提问于 2017-12-07 18:01:49
回答 2查看 3.9K关注 0票数 4
代码语言:javascript
运行
复制
/--common
/--common/build.gradle
/--common/deploy.gradle
/--project1
/--project1/build.gradle

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

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

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

代码语言:javascript
运行
复制
apply from: 'deploy.gradle'

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

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

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

因此,Gradle只在project1中寻找project1文件,即使我在project1 build.gradle文件中将依赖项设置为common项目。

问题是如何使deploy.gradlecommon项目中对project1可见。

EN

回答 2

Stack Overflow用户

发布于 2017-12-08 06:31:32

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

代码语言:javascript
运行
复制
├── a
│   └── build.gradle
├── b
│   └── build.gradle
├── build.gradle
├── gradle-scripts
│   └── deploy.gradle
└── settings.gradle

根项目的build.gradle定义

代码语言:javascript
运行
复制
ext.gradleScript = { scriptName ->
    file("${rootProject.projectDir}/gradle-scripts/${scriptName}.gradle")
}

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

代码语言:javascript
运行
复制
apply from: gradleScript('deploy')

项目的全部内容:

代码语言:javascript
运行
复制
$> 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
$>
票数 4
EN

Stack Overflow用户

发布于 2017-12-07 19:00:19

下面是引用common/deploy.gradle的示例common/deploy.gradle

代码语言:javascript
运行
复制
// import myDeploy task
apply from: "${rootDir}/common/deploy.gradle"

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

在多项目构建中,区分projectDirrootDir通常很重要。projectDir是特定的子项目;rootDirsettings.gradle居住的地方。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47701148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档