mike、mikeなるままに…

プログラムに関してぬるま湯のような記事を書きます

Gradleのjavadocタスクでjavadocを英語で出力する方法

こんにちわ、みけです。

表題の件はこの記事の前半部分に書いています。

なので、必要な人は前半部分だけ読んで下さい。


大した話ではありませんが、

gradleのjavadocタスクで出力されるjavadocが日本語で出力される

のがちょっと残念な時があります。

javaプラグインを入れていれば、javadocタスクが自動で追加されます。

僕のような日本語環境でやっている人だと、

頑張ってjavadocを英語で書いても、

テンプレートが日本語で出力されてしまいます。

会社で日本語を使っていて、

javadocが日本語でないと困る場合は、

全然問題ないとおもいますが…

オープンソースなソフトウェアを開発している場合、

javadocが日本語だとなんか若干困ります。

(まあ、だいたいjavadocのテンプレートなんで、何が出力されているかなんてわかりますけどね…)

javadocタスクの設定でoptions.localeen_USを指定すればいいです

つまり、以下のとおりになります。

build.gradle
1
2
3
4
5
apply plugin : 'java'

javadoc {
    options.locale = 'en_US'
}

本題、終わり


ちなみに、僕の得意技はtypoなので、間違えてこんなビルドスクリプト書いてました。

(誤)

build.gradle
1
2
3
4
5
apply plugin : 'java'

javadoc {
    options.local = 'en_US'
}

これを実行したら、こんなエラーが出力されました。

build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ gradle javadoc
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8

FAILURE: Build failed with an exception.

* Where:
Script '/Users/mike/myprojects/sample/build.gradle' line: 4

* What went wrong:
A problem occurred evaluating script.
> No such property: local for class: org.gradle.external.javadoc.StandardJavadocDocletOptions
  Possible solutions: locale

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 8.941 secs

gradle曰く

localなんてオプションないよ、localeじゃない?

というわけで、

gradleさん正しい答えを教えてくれたりと、親切ですね。

本当に親切なツールです。

しかし、

本当に親切なのはgroovyの思想

です。

例えば次のようなgroovyのスクリプトがあるとします。

error.groovy
1
2
3
4
def range = 1..10
range.colect {
    println (it * it)
}

これを実行するとこういうエラーが出力されます。

error.groovy
1
2
3
4
5
6
$ groovy error.groovy
Caught: groovy.lang.MissingMethodException: No signature of method: groovy.lang.IntRange.colect() is applicable for argument types: (error$_run_closure1) values: [error$_run_closure1@639d564]
Possible solutions: collect(), collect(), collect(groovy.lang.Closure), collect(groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure)
groovy.lang.MissingMethodException: No signature of method: groovy.lang.IntRange.colect() is applicable for argument types: (error$_run_closure1) values: [error$_run_closure1@639d564]
Possible solutions: collect(), collect(), collect(groovy.lang.Closure), collect(groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure)
  at error.run(error.groovy:2)

存在しないメソッドを呼び出した時に、

Possible solutionsということで、

サジェストしてくれます。

また、有名な例ですが、Power Assertもあります。

error.groovy
1
2
def list = [1,1,2,3,4,5]
assert list - [1,3,6] == [1,2,4,5]

これを実行すると、このように表示されます。

error.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ groovy error.groovy
Caught: Assertion failed:

assert list - [1,3,6] == [1,2,4,5]
       |    |         |
       |    [2, 4, 5] false
       [1, 1, 2, 3, 4, 5]

Assertion failed:

assert list - [1,3,6] == [1,2,4,5]
       |    |         |
       |    [2, 4, 5] false
       [1, 1, 2, 3, 4, 5]

  at error.run(error.groovy:2)

ただ、求めている結果と実際の結果が違うという表示だけでなく、

実際の値を示してくれます。

つまり一言で言えば、

groovyの半分は優しさでできています

なお、この機能はもともとからgroovyにあったわけではなく、

Spockというテスティングフレームワークから採用された機能です。

groovyの思想では、こういった、(・∀・)イイネ!!な機能を

どんどん取り込んでいくというのがあると思っています。

まあ、元々、javaを良い感じで書きたいといった思想から生まれている言語ですし、

実際に、rubyなど他の言語のいいところを借りたりしているので、

後発の優位性を遺憾なく発揮しているわけですが…