ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

gradleでのビルド時に、特定のクラス名を取得し、設定ファイル中の文字列を置換する

特定のネーミングルールに則ったクラス名の一覧を取得し、設定ファイルに書き込みたいことってありますよね。

build.gradle

task genConfig {
    StringBuilder sb = new StringBuilder();
    FileTree tree = fileTree(dir: 'src/main/java', include: '**/*Master.java')
    tree.each {File f ->
        String s = f.getPath()
        int begin = s.indexOf(srcDir)
        sb.append("<value>")
        sb.append(s.substring(begin + srcDir.length(), (s.length() - srcExt.length())).replace(File.separator, "."))
        sb.append("</value>\n        ")
    }
    ext.names = sb.toString()
}

application {
    processResources {
        filesMatching("**/config.xml") {
            filter(
                org.apache.tools.ant.filters.ReplaceTokens,
                tokens: [
                    'master.class.name': genConfig.names
                ]
            )
        }
    }

    // Define the main class for the application.
    mainClassName = 'jp.gr.java_conf.ksino.try_java.App'
}