kdnakt blog

hello there.

Gradleでコンパイル時の文字コードを指定する(Kotlin DSL版)

大した内容じゃないんだけどメモ。

[Gradleプロジェクトの文字化け]

先日実験した、Gradleプロジェクト内にKotlinとJavaを同居させるやつをついに実戦投入してみた。

kdnakt.hatenablog.com

より正確にいうと、mavenでビルドされたJavaのライブラリを、別のKotlin+Gradleプロジェクトが利用していたので、mavenの部分を丸っとGradleに書き換えた。

GradleのKotlin DSLの部分は特に問題なく書き換えられたのだが、実際にビルドしてみるとコンソールによくわからないエラーが表示された。エラー自体が文字化けしていて正確なエラー内容は理解できなかったが*1が、次のことは読み取れた。

[コンパイル時の文字コード指定]

そういえばmavenプロジェクトでもコンパイル時の文字コードUTF-8に指定していたのを思い出して、Gradleでの指定方法を検索すると、次の記事を見つけた。

m213f.hateblo.jp

build.gradleに以下のように書けばよい、と教えてくれている。

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

これは、Gradleのスクリプトだが、Kotlin DSLではなくGroovy DSLで書かれている。
自分の触っているプロジェクトはKotlin DSLで統一されているので、そちらの書き方を調べた。ちょっと時間がかかったが、公式サイトで何とか発見できた。

docs.gradle.org

withType()を使うのは同じだが、タスクの型を指定するのに<>記法を使って以下のように書く。

// build.gradle.kts
tasks.withType<Tar>().configureEach { enabled = false }

上記はあくまで公式サイトのサンプルなので、文字コードを指定する処理を書き直すと以下のようになった。

// build.gradle.kts
tasks.withType<JavaCompile>().configureEach { options.encoding = "UTF-8" }

これで無事コンパイルも通って、mavenでビルドしてからgradleでビルド、と言う二度手間が無くなった。

[まとめ]

  • GradleでJavaコンパイル時に出る文字コードのエラーを解消した
  • ネットの記事だとKotlin DSLでの書き方が出てこないことがあるので、KotlinとGroovyが併記されてる公式サイトを参考にした

*1:いくつかのサイトを見て、IntelliJ文字コードとかターミナルの文字コードとかの設定を変更してみたけれど効果がなかった...いずれ解決できたらブログにまとめたい。