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

时间:2018-11-24 19:51:47

标签: 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.

使用./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 file in project dir via build.gradle task(gradle 5.0),但是我没有这样的构造,所以我不知道它的用法。

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

  

在此Gradle版本中,作为公共API一部分的ObjectFactory服务现在包含一种创建SourceDirectorySet实例的方法。插件现在可以使用此方法代替内部类型。

但我不知道如何。

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

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

1 个答案:

答案 0 :(得分:23)

更新2019-01-23 五分钟前,kotlin 1.3.20已被released并在Gradle repository中进行了更新,因此应通过更新Kotlin来解决此问题。 Gradle插件1.3.20。

更新2019-01-11 Youtrack issue KT-26808中的目标版本已更新为1.3.20。您可以在Gradle存储库here中查看最新发布的版本,但目前仍有很多open issues for 1.3.20

更新2018-12-17 弃用警告已在提交https://github.com/JetBrains/kotlin/commit/67e82a54e5ee529116e881953f93a4c8f216e33a中修复,Youtrack问题已解决。现在等待release推出。

作为@Javaru pointed out,已经在Youtrack issue KT-26808上(2018年9月)进行了报道。

在链接Lance's comment中使用来自Thomas David Baker pointed to的信息:

答案:

如果您在不直接使用DeferredResult<Wrapper<Object>> deferredResult = new DeferredResult<>(); ForkJoinPool.commonPool().submit(() -> { try { Wrapper<Object> response = ... deferredResult.setResult(response); } catch (Exception e) { deferredResult.setErrorResult(e); } }); return deferredResult; 时收到此警告,则可能来自您使用的Gradle插件。您可以使用DefaultSourceDirectorySet标志来进行Gradle构建,例如--warning-mode all --stacktrace

在这种情况下,它是Kotlin Gradle插件,他们在DefaultKotlinSourceSet.kt#L140-L155上使用它:

./gradlew assemble --warning-mode all --stacktrace

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