wake-up-neo.net

Gradle kann den Ausgabebehälter des Moduls nicht finden, wenn eine benutzerdefinierte Aufgabe ausgeführt wird

Ich habe ein Gradle-Projekt mit drei Modulen, von denen jedes verschachtelt ist.

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

In meinem lib-Modul versuche ich, eine benutzerdefinierte Aufgabe zu erstellen (um Javadocs zu generieren, aber das ist wahrscheinlich nicht relevant)

library/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')
    ...
}

Das Problem ist, dass ich, wenn ich eine Gradle-Aufgabe (selbst Gradle clean) ausführte, eine Fehlermeldung bekomme, dass core.jar nicht gefunden wurde

org.gradle.api.ProjectConfigurationException: Es ist ein Problem aufgetreten beim Konfigurieren des Projekts ': Bibliothek'.

Verursacht durch: Org.gradle.api.artifacts.transform.ArtifactTransformException: Fehler Zum Umwandeln der Datei 'core.jar', damit die Attribute {ArtifactType = Android-classes} mit übereinstimmen verwandeln JarTransform

Verursacht durch: org.gradle.api.InvalidUserDataException: Die Umwandlungsausgabe -Datei ******/core/build/libs/core.jar ist nicht vorhanden.

Ich vermute, das passiert, weil Gradle während der Konfigurationsphase nach allen Klassenpfaden der Bibliothek (einschließlich core.jar) sucht. Aber warum?

  1. Warum löst Gradle nicht nur Abhängigkeiten während der Ausführung auf? (d. h. Warum sehe ich diesen Fehler für alle gradle Aufgabe?)

  2. Wie kann ich gradle anweisen, core.jar before zu erstellen, um diese benutzerdefinierte Aufgabe auszuführen?

8
tir38

Ich weiß nicht wirklich, warum dies funktioniert hat, aber durch das Entfernen des .files aus der Problemzeile wurden folgende Dinge gelöst:

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

Da variant.javaCompiler.classpath.files bereits ein Dateityp ist. Sie können beide Anweisungen ausprobieren:

classpath += variant.javaCompiler.classpath.files

Oder wie du schon erwähnt hast:

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

In meinem Fall hatte der Dateiname der Dateien (Dateiname) einen Tippfehler. Überprüfen Sie daher den Dateinamen und die Abhängigkeit, die Sie schreiben, um sicherzustellen, dass sie genau gleich sind.

0
E-max