Gradle将源集从java根项目泄漏到非java子项目

Gradle将源集从java根项目泄漏到非java子项目,java,gradle,multi-project,subproject,source-sets,Java,Gradle,Multi Project,Subproject,Source Sets,假设您有一个根项目和一个子项目的简单多项目构建: root |--sub | `----build.gradle |----build.gradle `----settings.gradle settings.gradle: include ':sub' root/build.gradle: apply plugin: 'java' sourceSets { println "sourceSets:" + main.java.srcDirs } sub/build.g

假设您有一个根项目和一个子项目的简单多项目构建:

root
 |--sub
 |   `----build.gradle
 |----build.gradle
 `----settings.gradle
settings.gradle:

include ':sub'
root/build.gradle:

apply plugin: 'java'
sourceSets {
    println "sourceSets:" + main.java.srcDirs
}
sub/build.gradle:

apply plugin: 'java'
sourceSets {
    println "sourceSets:" + main.java.srcDirs
}
然后
sourceSet
设置从根项目泄漏到
sub
项目,即使它没有指定java或java基本插件

我遇到了一个问题,一个自定义插件正在读取项目的源代码集。当它应用于没有应用java插件的子项目时,它基本上读取根项目的sourceSet,实际上它应该失败,因为没有应用java插件而缺少sourceSet。我知道这主要是因为自定义插件写得不好,但我认为在某些情况下,这可能会导致一些不必要的意外

java插件的这种“泄漏行为”是故意的吗


我知道这是一个写得很糟糕的问题,但在解决gradle的问题时,第一个要去的地方也是。

你确定
apply plugin:'java'
不在
allprojects{…}
subprojects{…}
根项目的闭包中吗?@Lance java Yes,我确信这个插件只应用于根项目。