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

它不那么精确,因为它不仅添加了我的源集中的内容,还添加了其他内容,但是它保证了它可以工作。而且在眼睛上更容易=)

09-11 21:55