2017-07-12 5 views
1

複数のjarファイルを作成しようとしています。私は複数のディレクトリを含む特定のディレクトリを持っています。各ディレクトリには独自のファイル(xmlとsql)があります。だから私は、サブディレクトリ名とその中のすべてのファイルを持つjarを作成しようとしています。これらのjarはjunitテストに使用されるため、事前に設定フェーズで作成します。gradle - 特定のディレクトリの下に反復的にjarを作成します。

"../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ファイルが表示されません。

これは間違っているようですが、わかりません。

答えて

1

複数のJarタスクを作成し、サブディレクトリごとに1つずつ、${projectDir}/templates内に作成し、generateTemplatesタスクはこれらのタスクすべてに依存します。

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 
例えば(私は generateTemplates allJarsへと改名しました)
関連する問題