2012-11-12 6 views
6

Voglio estrarre file "default.jasperreports.properties" da jasperreports.jar dipendeva e metterlo in distribuzione zip con nome nuovo "jasperreports.properties"Gradle - il file estratto dal vaso dipendeva

Esempio Gradle costruzione:

apply plugin: 'java' 

task zip(type: Zip) { 
    from 'src/dist' 
    // from configurations.runtime 
    from extractFileFromJar("default.jasperreports.properties"); 
    rename 'default.jasperreports.properties', 'jasperreports.properties' 

} 

def extractFileFromJar(String fileName) { 
    // configurations.runtime.files.each { file -> println file} //it's not work 
    // not finished part of build file 
    FileTree tree = zipTree('someFile.zip') 
    FileTree filtered = tree.matching { 
     include fileName 
    } 

} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    runtime 'jasperreports:jasperreports:2.0.5' 
} 

Come arrivare FileTree in extractFileFromJar() dalla dipendenza jasperreports-2.0.5.jar?

In script precedente io uso

FileTree tree = zipTree('someFile.zip') 

ma voglio usare somethink come (sbagliato, ma leggibile)

FileTree tree = configurations.runtime.filter("jasperreports").singleFile.zipTree 

PS: Provate a chiamare

def extractFileFromJar(String fileName) { 
    configurations.runtime.files.each { file -> println file} //it's not work 
... 

ma non funziona con l'eccezione

Non è possibile modificare una configurazione che non è in uno stato non risolto!

risposta

11

Ecco una possibile soluzione (a volte il codice dice più di mille parole):

apply plugin: "java" 

repositories { 
    mavenCentral() 
} 

configurations { 
    jasper 
} 

dependencies { 
    jasper('jasperreports:jasperreports:2.0.5') { 
     transitive = false 
    } 
} 

task zip(type: Zip) { 
    from 'src/dist' 
    // note that zipTree call is wrapped in closure so that configuration 
    // is only resolved at execution time 
    from({ zipTree(configurations.jasper.singleFile) }) { 
     include 'default.jasperreports.properties' 
     rename 'default.jasperreports.properties', 'jasperreports.properties' 
    } 
} 
+0

Grazie, mi aiutano molto. – popalka

+0

Una nota litle sull'uso transitiva = false Non è lavorare sul mio repository Maven personalizzati ospitati su googlecode.com Il mio script reale è http://oracle-ddl2svn.googlecode.com/svn/branches/2. ? x-Gradle/build.gradle r = 202 quando aggiungo dipendenze { \t distributiva 'com.googlecode: scheme2ddl: 2.0' { \t transitiva = false \t}} ho ottenuto l'errore > Impossibile trova il metodo com.googlecode: scheme2ddl: 2.0() per gli argomenti [build_2 tnud3244b5lndbqkchi9t13at $ _run_closure3_closure6 @ e38fca] sul progetto radice 'oracle-ddl2svn-gradle'. – popalka

+0

La tua sintassi è sbagliata - confronta con la mia. –

1

soluzione alternativa:

configurations { 
    batch 
} 

dependencies { 
    batch 'org.springframework.batch:spring-batch-core:3.0.8.RELEASE' { 
     transitive = false 
    } 
} 

def extractBatchSql(path) { 
    def zipFile = configurations.batch.find { it =~ /spring-batch-core/ } 
    def zip = new java.util.zip.ZipFile(zipFile) 
    def entry = zip.getEntry(path) 
    return zip.getInputStream(entry).text 
} 

task tmp() { 
    dependsOn configurations.batch 

    doLast { 
     def delSql = extractBatchSql("org/springframework/batch/core/schema-drop-oracle10g.sql") 
     println delSql 
    } 
}