不推荐使用DefaultSourceDirectorySet构造函数.如何使用ObjectFactory服务?

PHP*_*ate 29 gradle

我最近更新为gradle版本5.0-rc-4,当运行./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.
Run Code Online (Sandbox Code Playgroud)

当我使用时,./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.
Run Code Online (Sandbox Code Playgroud)

但是在下面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()
}
Run Code Online (Sandbox Code Playgroud)

有关

在项目目录中通过build.gradle任务(gradle 5.0)找到了创建version.txt文件,但我没有这样的结构,所以我不知道它将如何应用.

我发现在https://docs.gradle.org/5.0-milestone-1/release-notes.html的发行说明中提到了这种弃用,但他们说

在此版本的Gradle中,ObjectFactory服务(它是公共API的一部分)现在包含一个创建SourceDirectorySet实例的方法.插件现在可以使用此方法而不是内部类型.

但我不知道怎么做.

我还在https://docs.gradle.org/current/javadoc/org/gradle/api/file/SourceDirectorySet.html找到了SourceDirectorySet界面,但我看不到如何使用它.

模板存储库:https://github.com/PHPirates/kotlin-template-project

PHP*_*ate 26

更新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 指出的那样,已经在Youtrack问题KT-26808报道了(2018年9月).

使用LanceThomas David Baker指出的链接中的评论信息:

回答:

如果您在不DefaultSourceDirectorySet直接使用时收到此警告,则可能来自您使用的Gradle插件.你可以使用--warning-mode all --stacktraceGradle构建的标志来检查这个,就像这样./gradlew assemble --warning-mode all --stacktrace.

在这个特殊情况下,它是Kotlin Gradle插件,他们在DefaultKotlinSourceSet.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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我们可以相信他们会及时解决问题,所以不要担心警告.

  • 我对搜索也不是很熟悉,但是我尝试了搜索,并且得到了1.3.30的错误报告,所以我对出色的工作很感兴趣 (2认同)