我是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