ビルドツールエントリを見直してみて思ったことなどなど
ちょっと前に書いた
に関連して、はてブコメントへの反応とか、その他追加で考えたことについて。
IDE連携
どのIDEを用いるかの議論はあるにせよ、今どきJavaプロジェクトの開発で何もIDEを用いないのはさすがにしんどいかと思われます。ただ、IDEだけ用意すればいいわけでもありません。IDEとは独立してビルドツール・ビルドスクリプトも用意しておかないと、ビルドがIDE依存になってしまったりCIが回せなかったりと、色々不都合な面も出てきます。
ただ、IDEとビルドスクリプトを別途用意するのは意外と面倒なことも。単純に、IDEとビルドスクリプトを2セット揃えるのが手間ということもありますし、IDE(もしくはIDEプラグイン)でできることがビルドツールで同等の処理が実現できるかというとそうとも限りません。ビルドツールとIDEでコンパイラが違っているために、ビルド結果が異なることも。
そんなとき、Mavenではコンパイラを変更することができます。Eclipse用もありますし、これで初めて知ったJikesというやつもあります。果ては、Javaに限らずC#用のコンパイラも提供されているようです。
Using Non-Javac Compilers
- aspectj with artifactId plexus-compiler-aspectj.
- csharp with artifactId plexus-compiler-csharp.
- eclipse with artifactId plexus-compiler-eclipse.
- jikes with artifactId plexus-compiler-jikes.
上記で列挙されているもの以外でも、Groovy - Groovy-Eclipse compiler plugin for Mavenで提供されている「groovy-eclipse-compiler(Groovy-Eclipseプラグインで採用されているコンパイラ)」を用いたりすることもできます。
ビルドツールを支援するツール
XMLは手で書くのは大変だけどツールは作りやすい。DSLは記述を支援するだけならまだしも、それを読み込んでなにかしようというのを静的にやるのが超大変。てか無理。結局自前で解析するんじゃなくてランタイムを動かしてどうにかするのが一番手っ取り早い。
これはSBTの話ですが、概ねGradleにも同じことが言えるのではないかと。
ビルドツールの自由度が高いということは、ユーザにとってはいいことでしょうが、ビルドツールをサポートするようなツールを実装するのは厄介だということです。この視点はありませんでした。GradleのEclipseプラグインがいまいちな出来なのも、この辺に理由があるのかも*1。
Eclipseプラグインについては、Dosanko*SE:覚書を参考に。
*1:他のIDE × Gradleはちゃんと触ったことないので、今度見てみることにします