我有一个gradle构建脚本,其中包含一些具有所有定义的依赖关系的源集(有些是常见的,有些不是),并且我正在尝试使用Eclipse插件让Gradle为Eclipse生成.project
和.classpath
文件,但是我可以没有弄清楚如何将所有依赖项都放入.classpath
中;由于某种原因,实际上很少将外部依赖项添加到.classpath
,结果是Eclipse构建失败并出现1400错误(使用gradle构建可以正常工作)。
我已经定义了我的源集,如下所示:
sourceSets {
setOne
setTwo {
compileClasspath += setOne.runtimeClasspath
}
test {
compileClasspath += setOne.runtimeClasspath
compileClasspath += setTwo.runtimeClasspath
}
}
dependencies {
setOne 'external:dependency:1.0'
setTwo 'other:dependency:2.0'
}
由于我没有使用
main
源集,因此我认为这可能与它有关,因此我添加了sourceSets.each { ss ->
sourceSets.main {
compileClasspath += ss.runtimeClasspath
}
}
但这没有帮助。
我无法弄清所包含的库或不包含的库的任何公共(public)属性,但是我找不到我确定的任何内容(尽管当然必须要有一些内容)。我有一种感觉,所有包含的库都直接或间接地是
test
源集的依赖项,但是除了注意到test
的所有依赖项都存在之外,我还不能证明这一点。如何确保将所有源集的依赖项放入
.classpath
中? 最佳答案
这个问题的解决方式与我昨天问的similar question密切相关:
// Create a list of all the configuration names for my source sets
def ssConfigNames = sourceSets.findAll { ss -> ss.name != "main" }.collect { ss -> "${ss.name}Compile".toString() }
// Find configurations matching those of my source sets
configurations.findAll { conf -> "${conf.name}".toString() in ssConfigNames }.each { conf ->
// Add matching configurations to Eclipse classpath
eclipse.classpath {
plusConfigurations += conf
}
}
更新:
我也asked the same question in the Gradle forums,并得到了更好的解决方案:
eclipseClasspath.plusConfigurations = configurations.findAll { it.name.endsWith("Runtime") }
它不那么精确,因为它不仅添加了我的源集中的内容,还添加了其他内容,但是它保证了它可以工作。而且在眼睛上更容易=)