WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCo...

最近在升级 gradle 的时候遇到了这个问题,后来查看资料发现是从 gradle 4.10.1 及以上版本开始提示的。根据提示只要把 variant.javaCompile 改成 variant.javaCompileProvider 就行, 在我的项目中出问题的是一个三方库,出问题部分修改之前的代码如下

android.libraryVariants.all { variant ->
    def name = variant.buildType.name
    def task = project.tasks.create "jar${name.capitalize()}", Jar
    task.dependsOn variant.javaCompile
    task.from variant.javaCompile.destinationDir
    artifacts.add('archives', task)
}

修改之后

android.libraryVariants.all { variant ->
    def name = variant.buildType.name
    def task = project.tasks.create "jar${name.capitalize()}", Jar
    task.dependsOn variant.javaCompileProvider
    task.from variant.javaCompileProvider.destinationDir
    artifacts.add('archives', task)
}

在这里又遇到了一个错误,提示 unknown property 'destinationDir'

Could not get unknown property 'destinationDir' for provider(task compileDebugJavaWithJavac, class com.android.build.gradle.tasks.AndroidJavaCompile) of type org.gradle.api.internal.tasks.DefaultTaskContainer$TaskCreatingProvider_Decorated.

后来阅读源码发现 getJavaCompileProvider 获取的是一个 TaskProvider

@NonNull
@Override
public TaskProvider<JavaCompile> getJavaCompileProvider() {
    //noinspection unchecked
    return (TaskProvider<JavaCompile>) getVariantData().getTaskContainer().getJavacTask();
}

找到原因之后,最后修改的如下

android.libraryVariants.all { variant ->
    def name = variant.buildType.name
    def task = project.tasks.create "jar${name.capitalize()}", Jar
    task.dependsOn variant.javaCompileProvider
    task.from variant.javaCompileProvider.get().destinationDir
    artifacts.add('archives', task)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容