Я хочу извлечь несколько банок из войны как часть моей сборки 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?
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'
}
Я попробовал ответ Эла Дж., Но он не работал с включением.
Это сработало для меня:
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
}
Похоже, это ошибка / отсутствующая функция в 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")
}
}
Похоже, что с 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
сглаживает структуру (вы должны поместить имя в массив, чтобы он работал).
Похожие вопросы
Связанные вопросы
Новые вопросы
gradle
Gradle - это инструмент автоматизации сборки проектов, использующий Groovy DSL. Скрипты сборки Gradle поддерживают репозитории Maven и Ivy, а также простую файловую систему для управления зависимостями.