我的gradle配置相当不错,可以很好地构建所有内容。但是我多项目构建中的其中一个项目与其他项目区别太大了,我很想将其移动到另一个git存储库并使用子模块进行配置。
首先,我将该项目及其资源移动到子文件夹 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
- /Libraries
- /MovedProject
- build.gradle
- dependencies.gradle
- project.gradle
- tasks.gradle
- /MovedProject
- /Builder
- dependencies.gradle
- project.gradle
- tasks.gradle
- build.gradle
- settings.gradle
settings.gradle
include Libraries/MovedProject,
SomeMainProject1,
SomeMainProject2,
SomeMainProject3
移动项目的sourceSets在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无法看到该属性。
project.evaluationDependsOn()
属性。我想这个解决方案有点不太干净,但是我必须坚持一段时间。 - Mateusz Kubuszok