gradle - 在某个目录下迭代创建jar

用户826323

我正在尝试创建多个罐子。我有一个包含多个目录的目录。每个目录都有自己的文件(xml 和 sql)。所以我试图创建一个带有子目录名称和其中所有文件的 jar。这些 jars 将用于 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任务除了依赖所有这些任务之外什么都不做。例如(我重命名generateTemplatesallJars):

task allJars {
}

file("${projectDir}/templates").eachFile { f ->
    def taskName = "jar${f.name.capitalize()}"
    tasks.create(name: taskName, type: Jar) {
        archiveName = "${f.name}.jar"
        destinationDir = file('../dist')
        // Configure each JAR however you want
    }
    allJars.dependsOn taskName
}

示例构建:

$ 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章