我是Gradle和Groovy的新手,我希望能解決我的問題。Gradle:如何創建多個jar?
我有幾個包,每個包都需要編譯成一個jar包。
我發現的一個解決方案是創建Jar
類型的多個任務,但是我希望避免複製/粘貼,並在每次將新包添加到我的項目時都會生成一個巨大的gradle文件。
我目前的實現是有多個罐子的任務,像這樣的:
task jarFoo(type: Jar) {
baseName = "foo"
version = "1.0.0"
String className = baseName.capitalize()
from(sourceSets.main.output) {
include "$baseName/**"
}
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes "Implementation-Title": "$className",
"Implementation-Version": "$version",
"Main-Class": "$baseName.$className"
}
}
它的工作原理就像一個魅力,但我添加軟件包非常頻繁,我將結束與很多包,所以一很多任務和大量的複製/粘貼代碼。
擺弄build.gradle
文件後,我發現我需要擴展從Jar
才能創建一個jar。
因此,這裏是迄今爲止該類代碼:
class JarTask extends Jar {
String jarName = "default"
String jarVersion = "1.0.0"
@TaskAction
def jar() {
baseName = jarName
version = jarVersion
String className = baseName.capitalize()
// Thanks Opal for reminding that sourceSets
// is defined in project.
from(project.sourceSets.main.output) {
include "$baseName/**"
}
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes "Implementation-Title": "$className",
"Implementation-Version": "$version",
"Main-Class": "$baseName.$className"
}
}
}
task jarFoo(type: JarTask) {
jarName = "foo"
}
task jarBar(type: JarTask) {
jarName = "bar"
jarVersion = "1.2.42"
}
的問題是,所創建的jar忽略的方法基本上一切:它僅包含含MANIFEST.MF
一個符合清單版本被賦予項目名稱,而不是任務中給出的名稱。沒有其他的。
如果需要,您可以在我的GitHub repo(主要是法語)在線查找代碼。
任何想法將真正感激!
我可以'重現它。 – Opal
你的意思是說「優化」代碼適合你嗎? – Gabriel
我編輯了這個問題,添加了一些我在其中完成的工作。 – Gabriel