Как мне создать ZIP-архив моего источника с помощью Gradle? - PullRequest
14 голосов
/ 28 января 2011

Я превращаю относительно небольшой проект из Ant в Gradle.Я рассчитываю уменьшить количество строк в скрипте сборки примерно на 75%!

Одна вещь, которую делает сборка Ant, - это создание исходного ZIP-файла (то есть ZIP-файла всего проекта с удалением определенных битов -./ build, различные папки Eclipse и т. д.) При переносе этого в Gradle я решил использовать «инклюзивный» подход, а не «эксклюзивный», чтобы потом вещи случайно не включались.

Я хотел бы иметь возможность получить исходный код и ресурсы для всех исходных наборов без явного перечисления каталогов, но я не могу заставить его работать.

Вот что у меня такдалеко (даже не запускается!):

task srcZip(type: Zip) {
    classifier = 'src'
    from projectDir
    include {
        sourceSets.collect {
            it.allSource.asPath
        }
    }
}

ZIP-файл должен заканчиваться папками 'src / main / java / ...', 'src / main / resources / ...', 'src / test / java / ...' и т. д., и мне не нужно будет повторно посещать эту задачу, когда я добавлю больше исходных наборов позже.

Заранее спасибо!

Ответы [ 4 ]

21 голосов
/ 29 января 2011

Чтобы получить все источники в 1 zip-файле, вы можете использовать это:

task srcZip(type: Zip) {
    classifier = 'src'
    from sourceSets*.allSource
}

Это не даст вам структуру каталогов, о которой вы просили.Файлы из всех исходных наборов помещены в одну иерархию.

Чтобы получить то, что вы просили, вы можете использовать это:

task srcZip2(type: Zip) {
    classifier = 'src'
    from projectDir
    include 'src/**/*'
}

Конечно, это не учитываетизменения, которые вы можете внести в исходные каталоги.

8 голосов
/ 20 сентября 2012

Итак, 21 месяц спустя, вот что я сделал, чтобы заставить это работать (с Gradle 1.2)

task srcZip(type: Zip) {
    classifier = 'src'
    from projectDir
    include sourceSets*.allSource.srcDirs*.collect { relativePath(it) }.flatten()
    include 'LICENCE', 'README', 'NOTICE', 'gradlew*'
}
assemble.dependsOn(srcZip)

Мой Groovy-fu не силен, так что я уверен, что это ужасноСередина может быть упрощена, но пока она работает!

5 голосов
/ 04 марта 2016

Вот еще один способ, как мы можем создать zip исходного кода.Мы можем включать / исключать файлы согласно требованию.Работает в случае пользовательского плагина, который я использовал, и я потратил много времени на выяснение того, как сделать эту работу.Наконец-то я смог добиться этого, используя следующий код:

Task taskSourceZip = project.task("makeSourceZip", type:Zip){
        baseName = "sourceZip"
        from (project.rootDir){
            exclude ('*/*.iml')
            exclude 'sourceZip.zip'
        }
        destinationDir project.rootDir
    }
0 голосов
/ 14 декабря 2018

Пример из одного из моих проектов:

task srcZip(type: Zip) {
    classifier = 'src'
    from projectDir
    include 'src/**/*'
    include '*.gradle'
    include 'README.md'
    doLast {
        println "Path to zip: $archivePath.path"
    }
}
...