2016-04-20 7 views
2

Mit Gradle 2.11 und JVM 1.8.0_77.Gradle entpacken Archiv mit. Git-Ordner innerhalb

Die Gradle Kopie Aufgabe für ziptrees scheint nicht dot Ordner in ziptrees zu mögen, da es vollständig den .git Ordner ignoriert:

Archive.zip:

archive/someFile 
archive/.manifest 
archive/.git/objects/93/ 
archive/.git/objects/93/c426c3ffd836bfc0af36e6fd97a72b7b4f67be 
archive/.git/objects/info/ 
archive/.git/objects/aa/ 

Gradle Aufgabe

task unzip(type: Copy) { 
    def zipFile = file("archive.zip") 
    from zipTree(zipFile) 
    into workingDir 
} 

Ergebnis:

> $ gradle unzip 
> $ find archive/. 

archive/someFile 
archive/.manifest 

mit so etwas wie include '**/.git' tut auch zu funktionieren scheint.

Irgendwelche Ideen?

Antwort

3

Gradle Kopieraufgabe verwendet Ameisen DirectoryScanner, die kommt mit einer Reihe von Standardausschlüssen einschließlich **/.git und **/.git/**. Eine vollständige Liste der Standardausschlüsse finden Sie unten in diesem Beitrag. Siehe Fehler GRADLE-1883, derzeit geöffnet und nicht aufgelöst.

Sie können die Standardausschlussliste anpassen, indem Sie die Git-Einträge daraus entfernen. Alle Änderungen an Ihrer Aufgabe wirken sich jedoch auf nachfolgende Kopieraufgaben aus, was zu Problemen bei Tasks führen kann.

Die (ziemlich hässliche) sichere Abhilfe, wie auf der Seite mit dem Fehler vorgeschlagen, ist das Entfernen von Standardausschlüssen in Ihrer Aufgabe und das Zurücksetzen der Ausschlüsse vor dem Beenden Ihrer Aufgabe.

import org.apache.tools.ant.DirectoryScanner 

task unzip(type: Copy) { 
    doFirst { 
     DirectoryScanner.defaultExcludes.each { DirectoryScanner.removeDefaultExclude it } 
     DirectoryScanner.addDefaultExclude 'something has to be in here or everything gets excluded' 
    } 

    doLast { 
     DirectoryScanner.resetDefaultExcludes() 
    } 

    def zipFile = file("archive.zip") 
    from zipTree(zipFile) 
    into workingDir 
} 

Ant Standard ausschließen Muster:

**/%*%    
**/.git/**   
**/SCCS    
**/.bzr    
**/.hg/**   
**/.bzrignore  
**/.git    
**/SCCS/**   
**/.hg    
**/.#*    
**/vssver.scc  
**/.bzr/**   
**/._*    
**/#*#    
**/*~    
**/CVS    
**/.hgtags   
**/.svn/**   
**/.hgignore  
**/.svn    
**/.gitignore  
**/.gitmodules  
**/.hgsubstate  
**/.gitattributes 
**/CVS/**   
**/.hgsub   
**/.DS_Store  
**/.cvsignore  
0

Vor einiger Zeit, ich gleiches Problem hatte, aber nicht mit unzip, eher mit Reißverschluss. Ich konnte diese Lösung zu dieser Zeit nicht finden und hatte keine Ahnung, wie man das "default exclude" Ding in Großbuchstaben beheben kann. Ich habe die gleiche Lösung von ant gefunden und die ant-Aufgabe verwendet, um eine ZIP zu erstellen, die das "default excluded .git" -Dir enthält. Ich füge meine Problemumgehung für Leute an, die es nützlich finden könnten.

Ich habe nur das Code-Snippet kopiert, Dateiname ist eine Variable, die in einem anderen Teil der Build-Datei einen Wert zugewiesen bekommt. Ich habe eine Liste mit Ausschlüssen. Sie können Ihre eigene Liste bei Bedarf erstellen. Das einzige, was zu erwähnen ist, ist: Wie man eine ant-Aufgabe in einer grelle Aufgabe aufruft und dann "defaultExcludes" -Parameter auf NEIN setzt, um den Zweck zu erfüllen.

Verwandte Themen