【发布时间】:2015-04-30 09:28:21
【问题描述】:
我是 Gradle 和 Groovy 的新手,我希望有一些东西可以解决我的问题。
我有几个包,每个包都需要编译成一个jar。
我发现的一种解决方案是创建多个 Jar 类型的任务,但我想避免复制/粘贴,并在我向项目中添加新包时最终得到一个巨大的 gradle 文件。
我目前的实现是有多个 jar 任务,比如这个:
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(主要是法语)中在线找到代码。
任何想法都将不胜感激!
【问题讨论】:
-
我无法复制它。
-
你的意思是“优化”的代码对你有用吗?
-
我编辑了问题以添加一些我在它上面所做的进展。
-
我刚刚回答了这个问题,现在检查它是否有效。
标签: java groovy gradle build.gradle