LoginSignup
0
0

More than 5 years have passed since last update.

gradle でJavaおよびリソースの標準ディレクトリを作成するTask

Posted at

結論

makeDefaultDirectory.gradle

task baseFolderCreate {
    sourceSets*.resources.srcDirs*.each { it.exists() ? println("already exists dir ${it}") : it.mkdirs() }
    sourceSets*.java.srcDirs*.each { it.exists() ? println("already exists dir ${it}") : it.mkdirs() }
}

おまけ

以下は、Javaしかやってこなかった人間がここに至るまでの過程。

Javaだけで作る

Javaだけやってきた人.gradle
task baseFolderCreate {
    for (SourceSetContainer container : sourceSets) {
        for (File directory : container.java.srcDirs) {
            if (!directory.exists())
                if (directory.mkdirs())
                    System.out.println("create dir " + directory.getPath())
                else 
                    System.out.println("failed create dir " + directory.getPath())
            else 
                System.out.println("already exists dir " + directory.getPath())
        }
        for (File directory : container.resources.srcDirs) {
            if (!directory.exists())
                if (directory.mkdirs())
                    System.out.println("create dir " + directory.getPath())
                else
                    System.out.println("failed create dir " + directory.getPath())
            else
                System.out.println("already exists dir " + directory.getPath())
        }
    }
}

だめだコイツ・・・。早くなんとかしないと・・・。
※ネタです。

参考リンク:
gradleのbuildスクリプトに与えられるパラメータsourceSetsに関する情報のみ

each, it がちょっと分かってきた

gloovyのeach,itがわかってきた人向け.gradle
task baseFolderCreate {

    def func = {File f ->
        if (!f.exists()) {
            def ret = f.mkdirs()
            if (!ret)
                println "failed create dir ${f.getPath()}"
            else
                println "create dir ${f.getPath()}"
        }
    }

    sourceSets.each {
        it.java.srcDirs.each(func)
        it.resources.srcDirs.each(func)
    }

}

クロージャを試し始める。

参考リンク:
API Document クロージャ
API Document リスト操作

groovyだいぶ分かってきた

groovyわかってきた.gradle
task baseFolderCreate {
    def filter = {sourceSetContainer, targets ->
        sourceSetContainer.each { set ->
            targets.each { target ->
                set.getAt(target).srcDirs.each { it.exists() ? println("already exists ${it}") : it.mkdirs() }
            }
        }
    }

    filter(sourceSets, ["java", "resources"])
}

operatorによるプロパティアクセス。Javaには無い。
JavaScriptでなんとなく知ってたやつ。

参考リンク:
API Documnet operator

完全に理解した。

makeDefaultDirectory.gradle

task baseFolderCreate {
    sourceSets*.resources.srcDirs*.each { it.exists() ? println("already exists dir ${it}") : it.mkdirs() }
    sourceSets*.java.srcDirs*.each { it.exists() ? println("already exists dir ${it}") : it.mkdirs() }
}

参考リンク:
star-dot* operator

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0