Выходные файлы задачи распространения Gradle не в корневом каталоге ZIP

#gradle #software-distribution

#gradle #программное обеспечение-распространение

Вопрос:

Я создал простую сборку Gradle, которая экспортирует содержимое ./src/main/groovy в zip-файл. Zip-файл содержит папку с тем же именем, что и zip-файл. Я не могу понять, как получить файлы в корень zip-файла с помощью плагина распространения.

т.е. gradlew clean distZip создает:

helloDistribution-1.0.zip -> helloDistribution-1.0 -> файлы

что я хотел бы:

helloDistribution-1.0.zip -> файлы

Мой файл build.gradle:

 apply plugin: 'groovy'
apply plugin: 'distribution'

version = '1.0'

distributions {
    main {
        contents {
            from {
                'src/main/groovy'
            }
        }
    }
}
  

Я попытался устранить проблему, добавив into { 'dir' } , но безрезультатно.

Комментарии:

1. Так не получится. Я полагаю, что единственный способ создать такую иерархию — сделать это с помощью простой старой задачи ant zip.

Ответ №1:

Использование into '/' , похоже, делает свое дело:

 contents {
    from {
        'src/main/groovy'
    }
    into '/'
}
  

Комментарии:

1. Если вы просто измените build.gradle и вызовете gradle distZip , вы не увидите желаемого эффекта. Вы должны вызвать gradle clean distZip

Ответ №2:

К сожалению, ответ Пенфолда не сработал для меня. Вот решение, которое я придумал:

 task Package(type: Zip) {

    from {
        def rootScriptFiles = [] // collection of script files at the root of the src folder
        new File('src/main/groovy/').eachFile { if (it.name.endsWith('.groovy')) rootScriptFiles.add(it) }


        ['build/libs/',                 // build binaries
         'src/res/',                    // resources
         rootScriptFiles,               // groovy root source files
        ]
    }
    baseName = pluginName
}
  

Ответ №3:

Для копирования файлов в корень helloDistribution-1.0.zip -> helloDistribution-1.0 -> использования

 contents {
    from {
        'some/file'
    }
    into ''
}