直到Java 8 Gradle和Eclipse似乎彼此都很享受,从Java 9开始,它变得凌乱。我已经按照文档中的说明在gradle中配置了eclipse插件(没有版本或任何内容) https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html
但这不能正确设置源和目标兼容性,也不能使用JRE。所以我已经将它添加到我的gradle.build中:
eclipse {
classpath {
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-9/' // Add correct container
file {
whenMerged { classpath ->
classpath.entries.removeAll { entry -> entry.kind == 'con' && !entry.path.contains('JavaSE-9')} // Remove all other containers
classpath.entries.findAll{ it.kind == 'src' && it.entryAttributes['gradle_used_by_scope'].equals('test') }.each { // Mark test folders as containing test sourcers
it.entryAttributes['test'] = 'true'
}
}
}
}
jdt {
sourceCompatibility = org.gradle.api.JavaVersion.VERSION_1_9
targetCompatibility = org.gradle.api.JavaVersion.VERSION_1_9
}
}
这可行,但是挥之不去的问题当然是:为什么我需要这样做?我真的无法想象Gradle的eclipse插件会滞后于它不支持Java 9的地步。
无论如何,已经解决了这一问题,剩下的一件事我无法解决:如果我在whenMerged中打印类路径,则会看到ProjectDependency和Library条目,但在生成的.classpath文件中这些都丢失了。结果.classpath仅包含Source和Container条目。怎么会来?
我的项目使用Gradle 4.9和Eclipse 2018-09。 Eclipse已设置为使用Gradle包装器(但使用4.10.3并没有什么不同)。