Gradle:每个类目录一个jar

时间:2018-10-03 08:37:57

标签: java gradle

我生成了多个类文件夹,并尝试为每个文件夹生成一个Jar。 我将这些文件夹存储在classesDirectories变量中。

这是我尝试的任务:

task sourcesJar(type: Jar) {
    ext.counter= 0; 
    classesDirectories.each { aDir ->
        counter++
        baseName (counter.toString()) +".jar"
        from "${aDir}"
        destinationDir project.buildDir
    }
}

问题是我只找到一个Jar(最后一个生成的)。

如何为每个类目录生成一个jar?

1 个答案:

答案 0 :(得分:0)

Jar任务只能生成一个存档。

您可以使用动态任务创建功能在每个类目录中声明一个Jar任务:

// Main wrapper task that will depend on each source-x tasks
task sourcesJar

ext{
    // class directories 
    classesDirectories = ['externalClasses/app1', 'externalClasses/app2', 'externalClasses/app2']
    // counter for incrementing task name
    taskNum = 0
}
classesDirectories.each { srcDir ->
    taskNum++
    def task = task "source-${taskNum}" (type: Jar) {
        baseName "${taskNum}.jar"
        from file("$srcDir")
        destinationDir project.buildDir
    }
    sourcesJar.dependsOn(task)
}

然后,您只需要执行./gradlew sourcesJar:这将触发所有source-x任务的执行并产生预期的jar:

11:05:20: Executing task 'sourcesJar'...

> Task :source-1
> Task :source-2
> Task :source-3
> Task :sourcesJar