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?
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?)
Comment dire à gradle de construire core.jar avant que n'exécute cette tâche personnalisée?
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)
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)
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.