Gradle 在执行自定义任务时找不到模块的输出 jar
Posted
技术标签:
【中文标题】Gradle 在执行自定义任务时找不到模块的输出 jar【英文标题】:Gradle cannot find module's output jar when executing custom task 【发布时间】:2018-04-19 07:46:57 【问题描述】:我有一个包含三个模块的 Gradle 项目,每个模块都嵌套依赖于下一个:
android app module, which depends on...
android lib module, which depends on ...
java lib module (called core)
在我的 lib 模块中,我正在尝试创建一个自定义任务(生成 javadocs,但这可能不相关)
库/build.gradle:
apply plugin: 'com.android.library'
android
...
android.libraryVariants.all variant ->
task("$variant.nameDocs", type: Javadoc)
failOnError true
source = variant.javaCompiler.source
classpath = files(((Object) android.bootClasspath.join(File.pathSeparator)))
classpath += files(variant.javaCompiler.classpath.files) // THIS LINE IS CAUSING ERROR
dependencies
implementation project(':core')
...
问题是,当我运行任何 Gradle 任务(甚至 Gradle clean)时,我收到一个关于找不到 core.jar 的错误
org.gradle.api.ProjectConfigurationException:出现问题 配置项目':library'。
原因: org.gradle.api.artifacts.transform.ArtifactTransformException:失败 转换文件'core.jar'以匹配属性 artifactType=android-classes 使用转换 JarTransform
原因:org.gradle.api.InvalidUserDataException:转换输出 文件 ******/core/build/libs/core.jar 不存在。
我猜这是因为 Gradle 在配置阶段正在寻找库的类路径(包括 core.jar)所需的所有文件。但为什么呢?
为什么 gradle 不只在执行期间解决依赖关系? (即为什么我会在 每个 gradle 任务中看到这个错误?)
如何告诉 gradle 在执行此自定义任务之前构建 core.jar?
【问题讨论】:
【参考方案1】:因为 variant.javaCompiler.classpath.files 已经是文件类型。 你可以试试这两种说法:
classpath += variant.javaCompiler.classpath.files
或者正如你之前提到的:
classpath += files(variant.javaCompiler.classpath)
【讨论】:
【参考方案2】:我真的不知道为什么会这样,但只需从问题行中删除 .files
即可解决问题:
classpath += files(variant.javaCompiler.classpath)
【讨论】:
【参考方案3】:在我的情况下,文件的文件名(文件名)有错字,因此请检查文件名和您正在编写的依赖项以确保它们完全相同。
【讨论】:
以上是关于Gradle 在执行自定义任务时找不到模块的输出 jar的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件自定义 Gradle 任务 ② ( 在 Terminal 面板中执行 gradlew task 命令显示所有任务 | 命令行输出所有任务 | 单独执行指定任务 )
Android Gradle 插件自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )
在 next-auth 中制作自定义电子邮件登录页面时找不到“next-auth/react”模块