web-dev-qa-db-fra.com

Gradle ne trouve pas le fichier jar de sortie du module lors de l'exécution d'une tâche personnalisée

J'ai un projet Gradle avec trois modules, chacun avec une dépendance imbriquée le suivant:

Android app module, which depends on...
   Android lib module, which depends on ...
      Java lib module (called core)

Dans mon module lib, j'essaie de créer une tâche personnalisée (pour générer des javadocs, mais ce n'est probablement pas pertinent)

bibliothèque/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')
    ...
}

Le problème est que lorsque j'exécute une tâche Gradle (même Gradle clean), j'obtiens une erreur si je ne trouve pas core.jar.

org.gradle.api.ProjectConfigurationException: un problème est survenu configuration du projet ': bibliothèque'.

Causé par: org.gradle.api.artifacts.transform.ArtifactTransformException: Echec transformer le fichier 'core.jar' pour qu'il corresponde aux attributs {artifactType = Android-classes} en utilisant la transformation JarTransform

Causé par: org.gradle.api.InvalidUserDataException: transformation de la sortie Le fichier ******/core/build/libs/core.jar n'existe pas.

Je suppose que cela se produit car Gradle recherche tous les fichiers nécessaires au classpath de la bibliothèque (y compris core.jar) au cours de la phase de configuration. Mais pourquoi?

  1. Pourquoi gradle ne résout-il que les dépendances lors de l'exécution? (i.e. Pourquoi cette erreur apparaît-elle pour chaque tâche de gradage?)

  2. Comment dire à gradle de construire core.jar avant que n'exécute cette tâche personnalisée?

8
tir38

Je ne sais pas vraiment pourquoi cela a fonctionné, mais retirer simplement le .files de la ligne de problème a résolu les problèmes suivants:

classpath += files(variant.javaCompiler.classpath)
1
tir38

Comme variant.javaCompiler.classpath.files est déjà un fichier de type . Vous pouvez essayer les deux instructions

classpath += variant.javaCompiler.classpath.files

Ou comme tu le dis avant:

classpath += files(variant.javaCompiler.classpath)
4
Ivan Bryzzhin

Dans mon cas, le nom de fichier des fichiers (nom de fichier) avait une faute de frappe. Vérifiez donc le nom du fichier et la dépendance que vous écrivez pour vous assurer qu'ils sont exactement les mêmes.

0
E-max