gradleは単なるタスク実行基盤ツールですが、僕が3~4年前に人から「gradleなんてクッソマイナーで型もないgroovy(偏見)のツールなんて誰が使うか」と言われてた頃から比べると、Androidでの採用もあり、かなり普及した感があります。
さて、そんなだいぶ馴染んできたgradleですが、gradle3.0のデザインドキュメントを読んでいると、Javaだけのプロジェクトならそれほど変わらないかもしれないのですが、nativeと一緒のプロジェクトにおいては激しく変更される(より親密になる)ような感じがあります。
Gradle2.4で新しい(というかバイナリービルドでは使われていた)機能のドキュメントにその変更について若干見え隠れしています。これは以前書いたエントリーを参照下さい。
先ほどの記事自体を書いた時にドキュメントを読んでいたわけですが、そこに次のような文が書かれています。
This chapter describes and documents what is essentially the foundation for the Gradle 3.0 and the next generation of Gradle builds. It is being incrementally developed during the Gradle 2.x stream and is in use for Gradle's support for building native binaries.
意訳すると…
この章ではGradle3.0(次世代のGradle)の基礎になることが述べらている。この部分はGradle2.Xの間に少しずつ開発され、ネイティブサポートでは実際に使われていく
少し気にしてはいたのですが、今日Gradle Forumを眺めていて、ふとバイナリービルドの方法が気になってgoogleで検索などしていたら、Gradle3.0のデザインドキュメントを発見しました。
斜め読みしていると、
- Java5(使ってる人いるの?!)はサポートしない
- Gradle1.0の前にあったDSLはなくす
- AntベースのScalaビルドはやめる
Copy
タスク(Jar
やWar
も含む)を結構変える- 依存性グラフを変更する
- DSLのAPIで引数が
String
かObject
になってるメソッドオーバーロードしているやつは変えるtask.dependsOn
とか変わるっぽい- ファイルを指定する場合はこれまでは
from file('dirName/fileName.txt')
だったのがfrom 'dirName/fileName.txt'
になるっぽい(参照 DSL enhancement - implicit Type Coercion) Closure
とAction
を引数にとるやつも変える(まあ、多分Closure
記法のままでよいので見た目は変わらない)
Task
のleftShiftOperator
(<<
)やめるtask myTask << {println 'this is myTask'}
とかできなくなると思われる(task.doLast
使えということっぽい)
- サブプロジェクトは親プロジェクトを継承しなくなる(サブプロジェクトで
MissingProperty
が発生した場合は親プロジェクトのpropertyを探しに行ってた)
と、まあこんな感じで、「ん?特に劇的変更じゃなくね?」と思われるかもしれないのですけど、新しいjava
プラグインを使った場合のビルドスクリプトを読むと、かなり変わっていることがわかります。
参考になるドキュメントは、このあたり…
以上、未だにスクリプトを書くときにDSLドキュメントを読むようなgradleちからのない僕が雑に斜め読みしただけなので、実際はタイトルにあるほど激しく変更されるわけではないかもしれません:-p
全体的にはRule Based Model Configurationがベースになるような感じで、nativeとJava双方の親和性が高くなる感じがします。
なので、この恩恵を一番受けるのは、多分Androidを開発していて、nativeとJavaの両方を使っている人かなという気もします。
心に余裕ができたらデザインドキュメントを翻訳してみるかもしれませんが、精神障害者の僕にこころの余裕などあるわけがなく…(´・ω・`)