Gradle fatjar из каталога
У меня есть папка ("$buildDir/some/lib"), в которой много jar-файлов. Я хочу создать банку, в которой есть все эти банки, но они разархивированы. Я перепробовал множество вещей, но все они потерпели неудачу, включая следующую:
task fatJar(type: Jar, dependsOn: 'someTask') {
manifest {
attributes 'Main-Class': 'some.Main'
}
baseName = project.name + '-all'
from ("$buildDir/some/lib") {
eachFile { it.isDirectory() ? it : zipTree(it) } }
with jar
}
В этом случае ошибка:
Не удается преобразовать предоставленную запись в файл или URI: файл '/path/to/the/buidDir/above/someJar.jar'.
Любая помощь?
РЕДАКТИРОВАТЬ: Я изменил это на это, но он все еще не работает.. банки копируются, но они не распакованы... помогите! Почему это так сложно?
task fatJar(....) {
manifest {
.....
}
baseName = project.name + '-all'
FileCollection collection = files("$buildDir/some/lib")
from collection.collect { it.isDirectory() ? it : zipTree(it) }
with jar
}
1 ответ
Вы можете сделать следующее:
task fatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'some.Main'
}
baseName = project.name + '-all'
project.fileTree("$buildDir/some/lib").forEach { jarFile ->
from zipTree(jarFile )
}
with jar
}
Заметка
В первом решении вы получите сообщение об ошибке "Не удалось преобразовать предоставленную запись в файл или URI...", потому что в eachFile
закрытие (см. CopySpec.eachFile(), которым вы манипулируете FileCopyDetails
объекты, в то время как zipTree
Метод ожидает Zip Path. Одним из решений будет использование getPath()
метод: eachFile { it.isDirectory() ? it : zipTree(it.getPath()) } }