読者です 読者をやめる 読者になる 読者になる

Gradleで文字エンコーディングを指定する方法

groovy gradle

[2015/01/14 追記]

1行で書けることが分かったので追記しておきます。
ポイントはGroovyの闇仕様の「展開ドット演算子の代入用法」を使うところです。これによってeach部分が単なる代入で書けます。

def defaultEncoding = 'UTF-8'
tasks.withType(AbstractCompile)*.options*.encoding = defaultEncoding
tasks.withType(GroovyCompile)*.groovyOptions*.encoding = defaultEncoding

更に1行に連鎖させてしまえばこうなります。

tasks.withType(AbstractCompile)*.options*.encoding = tasks.withType(GroovyCompile)*.groovyOptions*.encoding = 'UTF-8'

Groovy公式ドキュメントでもこの「展開ドット演算子の代入用法」について説明がないので、若干不安なところではありますが、かなり初期の頃からあった隠し仕様のようなので突然廃止されることはないと思います。まあ、その辺はひとつ自己責任でお願いいたします。

[2012/12/12 追記]

今のところ、Gradleでのエンコード指定方法として、↓が最強だと思う。かっこいい。

encodingヘルパクロージャの所は気持ちは分かるけどちょっとやり過ぎ感があるので、個人的には↓で行こうかなと思います。

def defaultEncoding = 'UTF-8'
tasks.withType(AbstractCompile).each { it.options.encoding = defaultEncoding }
tasks.withType(GroovyCompile).each { it.groovyOptions.encoding = defaultEncoding }

ここから元記事

我々マルチバイト世界に生きている開発者にとって、文字エンコーディングを指定する方法は必須の知識ですね。


さてGradleの文字エンコーディング指定方法は微妙な感じです。

できることにはできるんですが、ドキュメントに明記されていません。
Gradleのコードを読んでみると、一応見つかるのですが、お世辞にもわかりやすいとはいえません。


というわけで、まとめておきます。

usePlugin 'groovy'

repositories {
    mavenCentral()
}
dependencies {
    groovy group:'org.codehaus.groovy', name:'groovy', version:'1.7-beta-2'
    testCompile group: 'junit', name: 'junit', version: '4.7' // Javaのテストコードを書く場合は必要
}

// ↓ここからが文字エンコーディング指定
// 普通にGroovyコードがかけるので、このようにdefaultEncodingローカル変数など
// を使って、DRYに指定することもできます。(その下がDRYっぽく見えないのは置いといて)
def defaultEncoding = 'UTF-8'
compileJava {
    options.encoding = defaultEncoding  // src/main/java配下の*.javaに影響
                                        // JAVA_OPTS=-Dfile.encoding で代替可能
}
compileTestJava {
    options.encoding = defaultEncoding  // src/test/java配下の*.javaに影響
                                        // JAVA_OPTS=-Dfile.encoding で代替可能
}
compileGroovy {
    groovyOptions.encoding = defaultEncoding  // src/main/groovy配下の*.groovyに影響
    options.encoding = defaultEncoding        // src/main/groovy配下の*.javaに影響
}
compileTestGroovy {
    groovyOptions.encoding = defaultEncoding  // src/test/groovy配下の*.groovyに影響
    options.encoding = defaultEncoding        // src/test/groovy配下の*.javaに影響
}