2014-12-04 3 views
5

type:Copy görevini kullanırken dosyaların üzerine yazılmasını önlemek için bir yol var mı? Ben 'dosya/dosya *' dışlamak kullanarak tüm dosyaları belirtmek kaçınmak istiyorumÜzerine yazmadan gradient kopyalama

task unpack1(type:Copy) 
{ 
    duplicatesStrategy= DuplicatesStrategy.EXCLUDE 

    delete(rootDir.getPath()+"/tmp") 

    from zipTree(rootDir.getPath()+"/app-war/app.war") 
    into rootDir.getPath()+"/tmp" 


    duplicatesStrategy= DuplicatesStrategy.EXCLUDE 
    from rootDir.getPath()+"/tmp" 
    into "WebContent" 
} 

:

Bu benim görevdir.

duplicatesStrategy= DuplicatesStrategy.EXCLUDE çalışmıyor gibi görünüyor. Gradle 0.9 ile ilgili bir sorun hakkında okudum ama Gradle 2.1 kullanıyorum.

Bu sorun hala var mı? Ya da bu görevin nasıl doğru bir şekilde kullanılması gerektiğini yanlış anlayabiliyorum mu?

Teşekkür

+0

tam olarak ne "üzerine yazılmasını dosyaları önlemenin bir yolu var mı" demek istiyorsunuz? Yukarıdaki kodda, ikinci 'in' ilkini kazanacaktır (sadece bir üst düzey olabilir). Ayrıca, '' '' '' '' ile aynı Kopya görevi için aynı olamaz. –

+0

Ben bu görevi Gradle WebContent içine 'görev unpack dosyanın üzerine (tip: Kopya) çalıştırmak bile { \t duplicatesStrategy = DuplicatesStrategy.EXCLUDE "/ tmp" rootDir.getPath() + dan \t \t içine "WebContent " " ' – carlitos081

+1

Ne demek istediğini görüyorum. 'DuplicatesStrategy', kopyalama kaynaklarındaki ('' ') kopyalarla ilgilidir. Hedef dizinde zaten var olan dosyaların üzerine yazmamak için 'Kopya 'görevini anlatmak için bir yapılandırma seçeneği yoktur, ancak bunu her bir" HerDosya "kullanarak gerçekleştirebilirsiniz. Detaylar için [Gradle Build Language Reference] 'da (http://gradle.org/docs/current/dsl/index.html)' Kopyala'ya bakın. Ayrıca, "gradle-all" indirmesinin 'samples' dizininde ilgili bir örnek de bulabilirsiniz. –

cevap

2

dosya hedef dizinde varsa Her zaman ilk kontrol edebilirsiniz: Peter Yorum dayalı

task copyFileIfNotExists << { 
    if (!file('destination/directory/myFile').exists()) 
    copy { 
     from("source/directory") 
     into("destination/directory") 
     include("myFile") 
    } 
} 
0

Örnek:

task unpack1(type: Copy) { 

    def destination = project.file("WebContent") 
    from rootDir.getPath() + "/tmp" 
    into destination 
    eachFile { 
     if (it.getRelativePath().getFile(destination).exists()) { 
      it.exclude() 
     } 
    } 
} 
1

BugOrFeature cevabı bir başka gelişmiş. Bu gelen ve parametrelere basit dizeleri kullanıyor, Dosyaya hedef dosyanın göreli yolu çözmek için CopySpec en destinationDir özelliğini kullanır:

task ensureLocalTestProperties(type: Copy) { 
    from zipTree('/app-war/app.war') 
    into 'WebContent' 
    eachFile { 
     if (it.relativePath.getFile(destinationDir).exists()) { 
      it.exclude() 
     } 
    } 
}