Конструктор DefaultSourceDirectorySet устарел. Как использовать службу ObjectFactory? - программирование
Подтвердить что ты не робот

Конструктор DefaultSourceDirectorySet устарел. Как использовать службу ObjectFactory?

Недавно я обновился до версии 5.0-rc-4 ./gradlew assemble, и при запуске ./gradlew assemble (или любой другой задачи) я получаю следующее сообщение:

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.

Когда я использую ./gradlew assemble --warning-mode all я получаю:

> Configure project :
The DefaultSourceDirectorySet constructor has been deprecated. This is scheduled to be removed in Gradle 6.0. Please use the ObjectFactory service to create instances of SourceDirectorySet instead.

Но в следующем build.gradle я не вижу, где я использую какой-либо DefaultSourceDirectorySet, так о чем это предупреждение, и что мне нужно изменить, чтобы он был совместим с Gradle 6.0?

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.10'
}

dependencies {
    compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
}

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
}

связанные с

Я нашел файл create version.txt в директории проекта с помощью задачи build.gradle(Gradle 5.0), но у меня нет подобных конструкций, поэтому я не знаю, как это будет применяться.

Я обнаружил, что это осуждение упомянуто в примечаниях к выпуску на https://docs.gradle.org/5.0-milestone-1/release-notes.html, но они говорят

В этом выпуске Gradle служба ObjectFactory, которая является частью общедоступного API, теперь включает метод для создания экземпляров SourceDirectorySet. Плагины теперь могут использовать этот метод вместо внутренних типов.

но я не вижу как.

Я также нашел интерфейс SourceDirectorySet адресу https://docs.gradle.org/current/javadoc/org/gradle/api/file/SourceDirectorySet.html, но не вижу, как его использовать.

Репозиторий шаблонов: https://github.com/PHPirates/kotlin-template-project

4b9b3361

Ответ 1

Обновление 2019-01-23 Пять минут назад был выпущен kotlin 1.3.20, а также обновлен в хранилище Gradle, поэтому эту проблему следует решить путем обновления плагина Kotlin Gradle до версии 1.3.20.

Обновление 2019-01-11 Целевая версия в выпуске Youtrack KT-26808 была обновлена до версии 1.3.20. Вы можете просмотреть последнюю выпущенную версию в репозиториях Gradle здесь, но на данный момент есть еще много открытых проблем для 1.3.20.

Обновление 2018-12-17 Предупреждение об устаревании исправлено в коммите https://github.com/JetBrains/kotlin/commit/67e82a54e5ee529116e881953f93a4c8f216e33a, проблема Youtrack закрыта. Сейчас жду выхода релиза.

Как отметил @Javaru, об этом уже сообщалось (в сентябре 2018 года) в выпуске Youtrack KT-26808.

Используя информацию из комментария Ланса в ссылке, на которую указал Томас Дэвид Бейкер:

Ответ:

Если вы получаете это предупреждение, когда не используете DefaultSourceDirectorySet напрямую, это, вероятно, исходит от используемого вами плагина Gradle. Вы можете проверить это, используя --warning-mode all --stacktrace для сборки Gradle, например, ./gradlew assemble --warning-mode all --stacktrace.

В данном конкретном случае это плагин Kotlin Gradle, они используют его по умолчаниюKotlinSourceSet.kt # L140-L155:

private val createDefaultSourceDirectorySet: (name: String?, resolver: FileResolver?) -> SourceDirectorySet = run {
    val klass = DefaultSourceDirectorySet::class.java
    val defaultConstructor = klass.constructorOrNull(String::class.java, FileResolver::class.java)

    if (defaultConstructor != null && defaultConstructor.getAnnotation(java.lang.Deprecated::class.java) == null) {
        // TODO: drop when gradle < 2.12 are obsolete
        { name, resolver -> defaultConstructor.newInstance(name, resolver) }
    } else {
        // (code omitted)
    }
}

Мы можем верить, что они решат проблему вовремя, поэтому не беспокойтесь о предупреждении.