我有很好的 gradle 配置,一切都很好。但是我的多项目构建中的一个项目非常多地来自其他项目,我很乐意将它移动到另一个 git repo 并配置子模块来处理它。
首先,我将 Project 及其资源移至 subfolder Libraries/MovedProject
。在 gradle 配置中更改了一些行后,它工作正常。但后来我决定为这个项目编写一个新的 build.gradle,并将所有配置从主配置移到那里。
这就是一切停止工作的地方。当我尝试调用任何任务时,它总是以Could not find property 'sourceSets' on project ':Libraries/MovedProject'
. 负责它的线路是:
dependencies {
...
if (noEclipseTask) {
testCompile project(':Libraries/MovedLibrary').sourceSets.test.output
}
}
我用它来运行测试,在这些测试中我使用来自其他项目的类。如果我删除该行,则构建仅在到达使用 MovedProject 的项目的 compileTestJava 任务时才会失败。如果我删除那条线并打电话,gradle :Libraries/MovedLibrary:properties
我可以看到:
...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1e263938
...
虽然gradle :Libraries/MovedLibrary:build
正确构建。
目前,我已将所有内容设置如下:
目录:
- /SomeMainProject1
- /SomeMainProject2
- /SomeMainProject3
- /图书馆
- /已移动项目
- 构建.gradle
- 依赖项.gradle
- 项目.gradle
- 任务.gradle
- /已移动项目
- /建造者
- 依赖项.gradle
- 项目.gradle
- 任务.gradle
- 构建.gradle
- 设置.gradle
设置.gradle
include Libraries/MovedProject, SomeMainProject1, SomeMainProject2, SomeMainProject3
MovedProject 的源集定义在
Libraries/MovedProject/project.gradle
:sourceSets { main { java { srcDir 'src' srcDir 'resources' } resources { srcDir 'resources' } } test { java { srcDir 'test/unit' } } }
使用 sourceSets.test.output 的依赖项存储在 中
Builder/dependancies.gradle
,并为需要 MovedProject 运行测试的每个项目设置:project(':SomeMainProject1') { dependencies { ... if (noEclipseTask) { testCompile project(':Libraries/net.jsdpu').sourceSets.test.output } } }
摆脱该错误并使用当前目录结构制作 gradle 构建项目的最简单方法是什么?我想了解为什么 gradle 看不到该属性。