Gradle与Eclipse - 当存在多个sourceset时,.classpath文件不完整

7
我有一个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
    }
}

但这并没有帮助到我。
我还没有找出所有被包含的库或未被包含的库的共同属性,但我找不到任何确定的东西(尽管肯定有些东西)。我感觉所有被包含的库都是“测试”源集的依赖项,直接或间接地,但我还没有能够验证更多,只是注意到所有“测试”的依赖项都在那里。
如何确保将所有源集的依赖项放入.classpath中?
3个回答

3
这个问题的解决方法与我昨天提出的一个类似的问题密切相关。
// 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
    }
}

更新:

我还在Gradle论坛提出了同样的问题,并得到了一个更好的解决方案:

eclipseClasspath.plusConfigurations = configurations.findAll { it.name.endsWith("Runtime") }

虽然它添加了一些源集之外的内容,但它保证可以工作,不像其他方法那样精确。而且这种方法更加易于阅读。


2

我同意Tomas Lycken的观点,最好使用第二个选项,但可能需要进行小的更正:

eclipse.classpath.plusConfigurations = configurations.findAll { it.name.endsWith("Runtime") }

(注:该段内容为原文,已翻译成中文)

额外信息:这是唯一适用于Gradle 2.0+的方法 - 感谢分享! - Svante

1
这是我在使用Gradle 2.2.1时成功的方法:

eclipse.classpath.plusConfigurations = [configurations.compile]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接