gradle tar task nicht ausgeführt
Schreibe ich einen Gradle-build für einen nicht-java-Projekt für die Montage der vorhandenen Verzeichnisse und tar-Archive in einem .tar.gz Die tar-Aufgabe springt, wenn ich die definition so:
task archive(dependsOn: 'initArchive',type: Tar) << {
baseName = project.Name
destinationDir = new File(project.buildDir.path+'/installer')
compression = Compression.GZIP
from (archiveDir)
doLast{
checksum(archivePath)
}
}
hier ist die Ausgabe der Konsole
:jenkins-maven-sonar:archive
Skipping task ':jenkins-maven-sonar:archive' as it has no source files.
:jenkins-maven-sonar:archive UP-TO-DATE
BUILD SUCCESSFUL
Total time: 9.056 secs
Wenn ich versuche, mit Teer Aufgabe als eine Methode, es scheitert nicht beschweren find-Methode
task archive(dependsOn: 'initArchive') << {
tar{
baseName = project.Name
destinationDir = new File(project.buildDir.path+'/installer')
compression = Compression.GZIP
from (archiveDir)
doLast{
checksum(archivePath)
}
}
}
FAILURE: Build failed with an exception.
* Where:
Build file '/home/anadi/Code/da-ci-installers/build.gradle' line: 29
* What went wrong:
Execution failed for task ':jenkins-maven-sonar:archive'.
> Could not find method tar() for arguments [build_6a2bckppv2tk8qodr6lkg5tqft$_run_closure3_closure5_closure7@4a5f634c] on task ':jenkins-maven-sonar:archive'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
Total time: 8.749 secs
Können wir den tar task in der gleichen Weise wie Gradle ermöglicht die Durchführung kopieren? In der gleichen bauen ich habe einen block wie folgt und ich möchte wissen, ob tar kann in gleicher Weise verwendet
copy {
project.logger.info("Copying bundle :: "+bundle[x])
from(rootProject.projectDir.path+"/3rd-party-tools/"+bundle[x]) {
include '**/*.*'
}
into(archiveDir)
}
wenn nicht, wie stellen Sie sicher, dass mein build nicht "überspringen " tar" Aufgabe, wenn mit dem ersten oben beschriebenen form.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie gefallen für den klassischen Fehler, zu konfigurieren eine Aufgabe in der Ausführungsphase eher als die Konfiguration phase. Die Lösung ist das entfernen der
<<
im ersten code snippet.Wenn Sie die
<<
(und der Unterschied, den es macht) verwirrend, eine gute Lösung ist, verwenden Sie niemals<<
aber immer deutlicherdoLast {}
.Gibt es keine
tar
Methode, aber es ist normalerweise besser, machen diese Dinge eine separate Aufgabe sowieso. (Methoden wiecopy
sollte nur dann bevorzugt werden, die über die entsprechende Aufgabe aus, wenn es einen starken Grund.)Hatte ich eine lustige situation, wo ich getroffen wurde von diesem bei der Verwendung doLast{} auf ein tar-Aufgabe.
War es wegen des multi-Projekt-build:
In diesem Fall, wenn Sie versuchen, eine
tar
oder einecopy
Aufgabe in der Haupt-build-Datei, die Referenzen etwas aus, dassproject(":sub-project")
es verwendet wird, zu versuchen, die Entwickler zu wickeln Sie es in doLast.Beispielsweise, main bauen.gradle-Datei hat:
Also Sie bekam eine Fehlermeldung, dass
project(":sub-project").war
existiert nicht. So, um zu bekommen, es stecke jemanddoLast {}
der Aufgabe und der Fehler ging Weg. SCHLECHT!!Dann war ich Links, um es zu beheben. So das richtige war zu tun, war es hinzufügen
evaluationDependsOn ":sub-project"
In der main bauen.gradle-Datei. Jetzt ist es weiß, zu bewerten. Entferne ich die falsche
doLast{}
block und die Aufgabe ist nun nicht mehr ignoriert.