Gradle 格拉德尔:';克隆';原始jar任务为jar创建一个新任务,包括依赖项

Gradle 格拉德尔:';克隆';原始jar任务为jar创建一个新任务,包括依赖项,gradle,Gradle,我想在我的项目中创建一个新任务,用我的项目的类文件和依赖项的类文件(也称为“着色jar”或“胖jar”)创建一个jar归档 Gradle cookbook提出的解决方案修改了JavaPlugin的标准jar任务: jar { from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } 但是,我希望保持原来的jar tak不变,并为shaeded jar提供一个额外的任务,即一个行为与

我想在我的项目中创建一个新任务,用我的项目的类文件和依赖项的类文件(也称为“着色jar”或“胖jar”)创建一个jar归档

Gradle cookbook提出的解决方案修改了JavaPlugin的标准jar任务:

jar {
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
但是,我希望保持原来的jar tak不变,并为shaeded jar提供一个额外的任务,即一个行为与jar任务完全相同的任务,但根据需要包含额外的文件

from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
并且有另一个分类器(“阴影”)

我试图通过复制如下属性来接管jar任务的配置:

task shadedJar(type: Jar, dependsOn: configurations.compile) {
    dependencies = tasks.jar.taskDependencies
    source = tasks.jar.source
    manifest = tasks.jar.manifest
    includes = tasks.jar.includes
    classifier = 'shaded'

    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
但是生成的任务不会接管“jar”的依赖项,并且生成的jar不包括项目的类文件。此外,将现有任务用作新任务模板的推荐方法似乎很麻烦

对于我的特定需求(单独的shadedJar任务)和“克隆”任务,一般来说,将它们用作其他任务的模板,建议采用什么方法


(我目前仍在使用Gradle 1.3,但也欢迎使用当前Gradle版本的解决方案)

没有内置的克隆任务的方法。但是,很容易将
fatJar
任务配置为包含与
java
插件的
jar
任务相同的文件:

task-fatJar(类型:Jar){
附录=“fat”
从sourceset.main.output//就是这样
从{configurations.compile.collect{it.isDirectory()?it:zipTree(it)}
}
任务自动关联将自动建立必要的任务依赖关系

如果构建脚本继续自定义
jar
任务,则可以将自定义同时应用于两个任务:

configure([jar,fatJar]){
version=“2.0”
entryCompression=“存储”
}
jar
任务不同,如果您自己定义“模板”,则可以使用工厂方法“实例化”它:

def getMeAnotherOne(字符串名称){
任务(名称,类型:Jar){
version=“2.0”
entryCompression=“存储”
}
}
getMeAnotherOne(“jar1”)
getMeAnotherOne(“jar2”)