执行自定义任务时,Gradle无法找到模块的输出jar

时间:2017-11-07 02:15:12

标签: java android gradle jar dependencies

我有一个包含三个模块的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.name}Docs", 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)。但为什么呢?

  1. 为什么gradle只在执行期间解析依赖关系? (即为什么每个 gradle任务都会看到此错误?)

  2. 如何在执行此自定义任务之前告诉gradle构建core.jar

3 个答案:

答案 0 :(得分:4)

因为variant.javaCompiler.classpath.files已经是文件类型。 您可以尝试这两种陈述:

classpath += variant.javaCompiler.classpath.files

或者如前所述:

classpath += files(variant.javaCompiler.classpath)

答案 1 :(得分:1)

我真的不知道为什么会这样,但只是从问题行中移除.files解决了问题:

classpath += files(variant.javaCompiler.classpath)

答案 2 :(得分:0)

在我的情况下,文件的文件名(文件名)有错字,因此请检查文件名和所写的依赖项以确保它们完全相同。