Gradle无法使用Java 9+正确设置Eclipse的.classpath

时间:2018-12-31 08:05:52

标签: java eclipse gradle gradle-plugin

直到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并没有什么不同)。

0 个答案:

没有答案