Я хочу извлечь несколько банок из войны как часть моей сборки gradle (2.0). Пока у меня есть это:

task unzip(type: Copy) {
    def zipFile = file('D:/external/dependent.war')
    def outputDir = file('lib')

    from zipTree(zipFile)
    into outputDir
    include 'WEB-INF/lib/*.jar'
}

Это помещает каталог WEB-INF / lib в outputDir. Я просто хочу, чтобы банки разложились.

Чтобы сделать это в Ant, я бы сделал следующее:

  <target name="unzip">
    <unzip src="D:/external/dependent.war" dest="lib">
        <patternset>
            <include name="WEB-INF/lib/*.jar"/>
        </patternset>
        <mapper type="flatten"/>
    </unzip>
  </target>

Как мне это сделать в Gradle?

10
opticyclic 2 Авг 2014 в 09:01

4 ответа

Лучший ответ

Я считаю, что вы можете просто добавить .files к своему zipTree.

task unzip(type: Copy) {
    def zipFile = file('D:/external/dependent.war')
    def outputDir = file('lib')

    from zipTree(zipFile).files
    into outputDir
    include 'WEB-INF/lib/*.jar'
}
7
al. 24 Авг 2015 в 16:23
У меня не сработало, но решение AngelWarrior работает
 – 
JayTheKay
30 Дек 2016 в 12:03

Я попробовал ответ Эла Дж., Но он не работал с включением.

Это сработало для меня:

task unzip(type: Copy) {
    def zipFile = file('D:/external/dependent.war')
    def outputDir = file('lib')

    from zipTree(zipFile).matching{include 'WEB-INF/lib/*.jar'}.files
    into outputDir
}
5
AngelWarrior 31 Авг 2016 в 09:33

Похоже, это ошибка / отсутствующая функция в Gradle http://issues.gradle.org/browse / GRADLE-3025

А пока я должен передать эту работу старому доброму надежному Муравью!

task unzip(){
  ant.unzip(src: 'D:/external/dependent.war', dest:'lib', overwrite:"true") {
    patternset( ) {
      include( name: 'WEB-INF/lib/*.jar' )
    }
    mapper(type:"flatten")
  }
}
3
opticyclic 4 Авг 2014 в 10:33

Похоже, что с Gradle есть способ. Однако это более сложно и не обязательно так очевидно.

task unzip(type: Copy) {
    def zipFile = file('D:/external/dependent.war')
    def outputDir = file('lib')

    from zipTree(zipFile)
    into outputDir
    include '**/*.jar'
    includeEmptyDirs false
    eachFile { FileCopyDetails fcp ->
        // remap the file to the root
        String[] segments = [fcp.getName()]
        fcp.relativePath = new RelativePath(true, segments)
    }
}

includeEmptyDirs false следит за тем, чтобы лишние каталоги не копировались.

Блок eachFile сглаживает структуру (вы должны поместить имя в массив, чтобы он работал).

2
2 revs 19 Фев 2015 в 00:39