gradle-在特定目录下迭代创建jar

gradle-在特定目录下迭代创建jar,gradle,build.gradle,Gradle,Build.gradle,我正在尝试创建多个jar。我有一个包含多个目录的特定目录。每个目录都有自己的文件(xml和sql)。因此,我试图创建一个包含子目录名和其中所有文件的jar。这些JAR将用于junit测试,所以我想在配置阶段提前创建它 目标目录“./dist”存在于此项目之外 ext.createTemplateJar = { sourceDirectory, jarFileName -> jar { archiveName = jarFileName from so

我正在尝试创建多个jar。我有一个包含多个目录的特定目录。每个目录都有自己的文件(xml和sql)。因此,我试图创建一个包含子目录名和其中所有文件的jar。这些JAR将用于junit测试,所以我想在配置阶段提前创建它

目标目录“./dist”存在于此项目之外

ext.createTemplateJar = { sourceDirectory, jarFileName ->
    jar {
        archiveName = jarFileName
        from sourceDirectory
        includeEmptyDirs = false
        manifest 
        {
            attributes  'Implementation-Title'      : VENDOR_NAME
        }
    }   
    println "creating a jar for ${jarFileName}"
}

tasks.withType(Jar) {
    destinationDir = file("../dist")
}

task generateTemplates {
    new File("${projectDir}/templates").eachFile() { file ->
        if (file.isFile()) {
            return
        }
        println "template dir is ${file.path}"
        createTemplateJar(file.path, "${file.name}.jar")
    }    
}
当我执行这个gradle generateTemplates时,它运行得很好,但是我没有看到在目标目录中创建的任何jar文件


这似乎有点不对劲,但我看不出来。

您应该创建多个
Jar
任务,每个任务对应
${projectDir}/templates
中的每个子目录,让您的
generateTemplates
任务只依赖于所有这些任务。例如(我将
generateTemplates
重命名为
allJars
):

示例构建:

$ ls templates/
bar  baz  foo  test

$ ./gradlew clean allJars
:clean
:jarBar
:jarBaz
:jarFoo
:jarTest
:allJars

BUILD SUCCESSFUL

Total time: 0.615 secs

$ ls ../dist/
bar.jar  baz.jar  foo.jar  test.jar
$ ls templates/
bar  baz  foo  test

$ ./gradlew clean allJars
:clean
:jarBar
:jarBaz
:jarFoo
:jarTest
:allJars

BUILD SUCCESSFUL

Total time: 0.615 secs

$ ls ../dist/
bar.jar  baz.jar  foo.jar  test.jar