2012-11-12 18 views
6

chcę wyodrębnić plików „default.jasperreports.properties” od zależało jasperreports.jar i umieścić go w dystrybucji zip z nazwą „nowych” jasperreports.propertiesGradle - plik wyciąg z zależała słoiku

Sample Gradle produkcji:

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' 
} 

Jak zdobyć FileTree w extractFileFromJar() z zależności JasperReports-2.0.5.jar?

W skrypcie powyżej używam

FileTree tree = zipTree('someFile.zip') 

ale chcą korzystać somethink jak (nie tak, ale czytelny dla człowieka)

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

PS: Spróbuj zadzwonić

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

, ale nie działa z wyjątkiem

Nie można zmienić konfiguracji, która nie jest w nierozwiązanym stanie!

Odpowiedz

11

Oto możliwe rozwiązanie (czasami kod mówi więcej niż tysiąc słów):

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

Dzięki, mi wiele pomóc. – popalka

+0

litle uwaga o wykorzystanie przechodnich = false To nie działa na moim niestandardowych repozytoria maven umieszczonych na googlecode.com Mój rzeczywisty scenariusz jest http://oracle-ddl2svn.googlecode.com/svn/branches/2. ? x-Gradle/build.gradle r = 202 kiedy dodać zależności { \t rozdzielcze 'com.googlecode: scheme2ddl: 2,0' { \t przechodnia = false \t} } mam błąd > nie udało się znajdź metodę com.googlecode: scheme2ddl: 2.0() dla argumentów [build_2 tnud3244b5lndbqkchi9t13at $ _run_closure3_closure6 @ e38fca] na głównym projekcie 'oracle-ddl2svn-gradle'. – popalka

+0

Twoja składnia jest nieprawidłowa - porównaj z moją. –

1

alternatywne rozwiązanie:

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 
    } 
}