Подтвердить что ты не робот

Как создать 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/... 'и т.д. и мне не нужно будет повторно посещать эту задачу, когда я добавлю больше наборов источников позже.

Спасибо заранее!

4b9b3361

Ответ 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"
    }
}