我在一个多项目系统(有 40 多个子项目)中工作。每个子项目都有自己的布局(大多数遵循通用布局,但有些不同)。 在子项目中我有这两个:
- testjunit
- sourceSets
- lptfExperimental
- other source sets
- basicservices
- sourceSets
- testacceptance
- other source sets
我需要使源集basicservices-testacceptance
依赖于源集testjunit-lptfExperimental
的输出。
我尝试过:
dependencies{
testacceptanceCompile project(':testjunit').sourceSets.lptfExperimental.output
}
和
dependencies{
project.parent.subprojects.each{prj ->
if(prj.name == "testjunit")
testacceptanceCompile prj.sourceSets.findByName('lptfExperimental').output
}
但在这两种情况下我都会收到以下错误:
FAILURE: Build failed with an exception.
Where: Script 'C:\Development\defaults.gradle' line: 144
What went wrong: A problem occurred evaluating script. Could not find property 'lptfExperimental' on SourceSet container.
只是一个额外的信息:此依赖项在名为 defaults.gradle
的文件中声明,该文件应用于 basicservices
项目的 build.gradle
.
/defaults.gradle:
apply plugin: 'java'
apply plugin: 'eclipse'
...
sourceSets {
...
// test acceptance
testacceptance{
java{
srcDir 'test/acceptance/src/java'
}
resources {
srcDir 'test/acceptance/src/java'
}
}
...
}
// default dependencies
dependencies{
testacceptanceCompile project(':testjunit')
testacceptanceCompile project(':testjunit').sourceSets.lptfExperimental.output
}
...
/testjunit/build.gradle:
...
sourceSets{
...
lptfExperimental{
java {
srcDir 'lptf-experimental/src/java'
}
resources {
srcDir 'lptf-experimental/src/java'
}
}
...
/basicservices/build.gradle:
apply plugin: 'java'
apply plugin: 'eclipse'
apply from: '../defaults.gradle'
dependencies{
...
compile project(':testjunit')
...
}
最佳答案
我可以使用 this question 中提到的解决方案解决问题.
基本上,我在 defaults.gradle
中添加了指令 evaluationDependsOn(':testjunit')
。它解决了这个问题。该指令的引用是 here .
关于java - Gradle 依赖于不同项目的源集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883770/