#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 ''
}