hatora's blog

日常の出来事や仕事のことなど/Java/開発/Web/IT

sourceSets mainの意味

今回もGradleに関する備忘録です。



'java'プラグインに関する話なのですが、ネット上のサンプルを見ると以下の様な
コードが例として挙がっています。

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
    }
}

第23章 JavaプラグインやSourceSetのAPIを見ても、mainといった文字列は出てこなくて、これなんだろう...と思っていました。
*1
*2




結論からいうと、'java'プラグインが提供している標準のソースセット名
ということになります。

そもそもソースセットとはその名が表している通り、ソースファイルに関するグループの概念です。
ソースセットを定義することで、扱うべきソースの情報を管理できるわけです。


ちなみに'java'プラグインは標準で「main・test」2つのソースセットを提供しています。
いわゆるサンプルに出てきているあれです。
「main・test」と命名されているのは、Gradle標準のディレクトリ構成に合わせているからでしょう。


例えば以下はよく見かけると思います。
これはmain・testソースセットの値を変更している例です。

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
    }
    test {
        output.classesDir = file('.')
    }
}


新しくソースセットを定義してみます

sourceSets {
  sample {
    java {
      srcDir 'src/sample'
    }
  }
}


プロパティを確認してみましょう。
新たにソースセット&タスクが定義されていることが確認できます。
「gradle compileSampleJava」とすることで新たに定義したソースセットに対してコンパイルが実行できます。

gradle properties | egrep '^(sources|sourceSets|tasks)'
・
・
sourceSets: [source set 'main', source set 'sample', source set 'test']
sources: [[source set 'main:java', source set 'main:resources'], [source set 'sample:java', source set 'sample:resources'], [source set 'test:java', source set 'test:resources']]
tasks: [task ':assemble', task ':build', task ':buildDependents', task ':buildNeeded', task ':check', task ':classes', task ':clean', task ':compileJava', task ':compileSampleJava', task ':compileTestJava', task ':jar', task ':javadoc', task ':processResources', task ':processSampleResources', task ':processTestResources', task ':sampleClasses', task ':test', task ':testClasses']

*1:※というよりも、「これなんやねん!!」とう感情

*2:よくよく見返すとちゃんとそれらしいこと書いてあった