Как создать ZIP файл моего источника с помощью Gradle?
Я конвертирую относительно небольшой проект из Ant в Gradle. Я ожидаю уменьшить количество строк в сборке script примерно на 75%!
Одна вещь, которую делает сборка Ant, - это создать исходный ZIP (т.е. ZIP всего проекта с удаленными битами -./build, различные папки Eclipse и т.д.). Мигрируя на Gradle Я решил использовать "инклюзивный" подход, а не "эксклюзивный" подход, чтобы потом не попасть в аварию позже.
Я хотел бы иметь возможность захватить исходный код и ресурсы для всех исходных наборов без необходимости явно указывать каталоги, но я не могу заставить его работать.
Вот что я до сих пор (даже не запускаюсь!):
task srcZip(type: Zip) {
classifier = 'src'
from projectDir
include {
sourceSets.collect {
it.allSource.asPath
}
}
}
Почтовый файл должен содержать папки src/main/java/... ',' src/main/resources/... ',' src/test/java/... 'и т.д. и мне не нужно будет повторно посещать эту задачу, когда я добавлю больше наборов источников позже.
Спасибо заранее!
Ответы
Ответ 1
Чтобы получить все источники в 1 zip файл, вы можете использовать это:
task srcZip(type: Zip) {
classifier = 'src'
from sourceSets*.allSource
}
Он не даст вам структуру каталогов, о которой вы просили. Файлы из всех исходных наборов помещаются в одну и ту же иерархию.
Чтобы получить то, что вы просили, вы можете использовать это:
task srcZip2(type: Zip) {
classifier = 'src'
from projectDir
include 'src/**/*'
}
Конечно, он не принимает во внимание любые изменения, которые вы могли бы внести в исходные каталоги.
Ответ 2
Итак, 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)
My Groovy -fu не сильный, поэтому я уверен, что этот ужасный бит в середине можно упростить, но он работает сейчас!
Ответ 3
Вот еще один способ создания zip исходного кода. Мы можем включать/исключать файлы в соответствии с требованиями. Работает в случае пользовательского плагина, который я использовал, и я потратил много времени на выяснение того, как это сделать. Наконец, я смог достичь этого, используя нижеприведенный код:
Task taskSourceZip = project.task("makeSourceZip", type:Zip){
baseName = "sourceZip"
from (project.rootDir){
exclude ('*/*.iml')
exclude 'sourceZip.zip'
}
destinationDir project.rootDir
}
Ответ 4
Пример из одного из моих проектов:
task srcZip(type: Zip) {
classifier = 'src'
from projectDir
include 'src/**/*'
include '*.gradle'
include 'README.md'
doLast {
println "Path to zip: $archivePath.path"
}
}