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' }