Gradle Задача Zip для выполнения нескольких поддеревьев?

Мы пытаемся создать мало сложный Zip файл в Gradle из нескольких исходных деревьев файловой системы, но независимо от того, сколько спецификаций into мы даем, все это помещает их в один и тот же. Можно ли это сделать в Gradle?

build/libs/foo.jar --> foo.jar
bar/*              --> bar/*

Мы получаем это вместо:

build/libs/foo.jar --> bar/foo.jar
bar/*              --> bar/*

Используя это:

task installZip(type: Zip, dependsOn: jar) {
    from('build/libs/foo.jar').into('.')
    from('bar').into('bar')
}

Любая помощь будет оценена.

EDIT: Gradle 1.0-milestone-3

Ответ 1

Попробуйте следующее:

task zip(type: Zip) {
    from jar.outputs.files
    from('bar/') {
        into('bar')
    }
}

Сначала... банку должно быть в корне /zip (что, кажется, вам нужно). Во-вторых, указав из jar.outputs.files, в jar-задаче есть неявный dependsOn, поэтому это показывает другой способ выполнения того, что вы хотите. За исключением этого подхода, если имя банка меняется со временем, это не имеет значения. Дайте мне знать, если вам нужна дополнительная помощь.

Ответ 2

По-видимому, комментарии к ответу не позволят удобному способу показать больше кода... или это не очевидно:) У меня есть проект, который для клиента... поэтому я не могу поделиться полный файл проекта/сборки. Вот что я могу разделить (я изменил конкретный проект на XXX):

task zip(type: Zip) {

    from jar.outputs.files

    from('scripts/') {
        fileMode = 0755
        include '**/runXXX.sh'
        include '**/runXXX.bat'
    }
    from('lib/') {
        include '**/*.jar'
        into('lib')
    }
    from('.') {
        include 'xxx.config'
    }

}

Это создает zip с jar проекта в корне zip. Копирует скрипты из каталога в корневой каталог, копирует файл конфигурации в корневой каталог и создает каталог в корне zip с именем /lib и копирует все банки из проекта/библиотеки в zip/lib.