Gradle with Eclipse - 多个源集时不完整的.classpath

Posted

技术标签:

【中文标题】Gradle with Eclipse - 多个源集时不完整的.classpath【英文标题】:Gradle with Eclipse - incomplete .classpath when multiple sourcesets 【发布时间】:2013-06-07 12:43:03 【问题描述】:

我有一个 gradle 构建脚本,其中包含一些源集,它们都定义了各种依赖项(一些常见,一些没有),我正在尝试使用 Eclipse 插件让 Gradle 生成 .project.classpath Eclipse 的文件,但我不知道如何将所有依赖项条目放入.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
    

但这并没有帮助。

我无法找出包含的库或未包含的库的任何共同属性,但我找不到任何我确定的东西(尽管当然必须有某物)。我有一种感觉,所有包含的库都是 test 源集的依赖项,无论是直接还是间接,但我无法验证这一点,而不仅仅是注意到 test 的所有依赖项都在那里。

如何确保所有源集的依赖项都放在.classpath中?

【问题讨论】:

【参考方案1】:

这个问题的解决方式与我昨天问的 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.nameCompile".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") 

它没有那么精确,因为它添加了其他东西,而不仅仅是我的源集中的东西,但它保证它会起作用。而且眼睛更容易=)

【讨论】:

【参考方案2】:

我同意 Tomas Lycken 的观点,最好使用第二个选项,但可能需要稍作修正:

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

【讨论】:

奖励信息:这是唯一适用于 Gradle 2.0+ 的方法 - 感谢分享!【参考方案3】:

这就是 Gradle 2.2.1 对我有用的:

eclipse.classpath.plusConfigurations = [configurations.compile]

【讨论】:

以上是关于Gradle with Eclipse - 多个源集时不完整的.classpath的主要内容,如果未能解决你的问题,请参考以下文章

从 Eclipse 生成 Gradle 构建文件,出现错误:需要 Gradle 版本 1.10

如何让 gradle/Eclipse/play 框架协同工作?

3.3. Mapping methods with several source parameters(具有多个源参数的映射方法)

导入项目(Eclipse ADT、Gradle 等)选项在 Android Studio 2.3.2 中不退出

Eclipse Maven和Gradle区别及使用Eclipse中使用Gradle下载Jar包

Android Eclipse 导入 AS Gradle AAR 库手冊