Gradle неправильно устанавливает .classpath Eclipse с Java 9+ - PullRequest
0 голосов
/ 31 декабря 2018

До Java 8 Gradle и Eclipse, кажется, наслаждаются друг другом, начиная с Java 9 это становится грязным.Я настроил подключаемый модуль eclipse в Gradle, как указано в документации (без версии или чего-либо еще) 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 не имеет значения).

...