我有两个模块 A 和 B。模块 A 是通用的,可以包含在许多不同的项目中。我通过以下方式配置了一个自定义依赖项:
build.gradle(模块 A)
configurations { providedCompile }
eclipse.classpath.plusConfigurations += configurations.providedCompile
sourceSets {
main { compileClasspath += configurations.providedCompile }
test { compileClasspath += configurations.providedCompile }
}
模块 A 对某些库(例如 com.test.gradle.C)有一个自定义的“providedCompile”依赖。像这样:
build.gradle(模块 A)
providedCompile "com.test.gradle.C:common-tests:${myTestsVersion}"
现在,在模块 B 中,我定义了对模块 A 的依赖。
build.gradle(模块 B)
compile project(':moduleA')
在模块 B(一个 Web 项目)中,我想使用不同版本的库 com.test.gradle.C,例如
compile "com.test.gradle.C:common-tests:${myTestsVersion}"
问题是,在 Eclipse 部分部署程序集中我可以看到模块 A 中的库。这是因为 .classpath 文件包含
<classpathentry ...>
<attributes>
<attribute .../>
</attributes>
</classpathentry>
为了摆脱属性元素,我在 gradle 中编写了以下内容:
build.gradle(模块 A)
eclipse {
classpath.file {
// Classpath entry for Eclipse which changes the order of classpathentries; otherwise no sources for 3rd party jars are shown
withXml { xml ->
def node = xml.asNode()
def provided = node.findAll { it.@path.contains('com.test.gradle.C') }
provided.each{ dep ->
dep.children().clear()
}
}
}
}
这就是我解决问题的方法,但我认为必须有更好的方法。有人可以帮忙吗?