目的
- Javaのビルドについて理解したい。
- そのために、関係する用語の意味を調べて整理したい。
背景
- 諸々の状況があって、Javaのビルドの仕組みについて調べ始めた。
- Javaのビルドについて調べる中で、不明な用語が多数あることに気づいた。
- ここでは、Javaのビルドに関係する用語を調べて整理しておく。
調査結果
- Apache Ant
- OSに依存しないJava開発をターゲットにしたOSSのビルドツール。元々、Apache Tomcatのビルド用ツールとして作られた。
- 開発者は、ビルドに関する作業を「タスク」としてXMLのビルドファイルに定義する。それをAntで実行してビルドする。
- Java開発の大規模化・複雑化により厳しくなったため、Apache Mavenが開発された。
- Apache Maven
- ビルドツール。Java開発のデファクトスタンダード。Eclipseに組み込まれている。InteliJも対応している。
- 開発者は、ビルドに関する作業内容は定義せず、作業目的をXMLのビルドファイルに定義する。それをMavenが読み込んでビルドする。
- Mavenはビルドのために必要なソフトウェアをリポジトリからダウンロードして利用する。
- Apache Ivy
- Apache Antのサブプロジェクトで、依存ライブラリの管理ツール。
- ビルドに必要なリソースの依存関係を管理し、適切にダウンロードして利用する。
- 機能はApache Mavenと競合している。
- Groovy
- JVM上で動作するOSSのスクリプト言語。現在は、Apache Software Foundationで管理されている。
- Groovyは内部でJavaのAPIを呼び出すため、JVMから見れば両方Javaに見える。
- JavaのフレームワークでGroovyをサポートしているものもある。例えば、Spring Frameworkは、Groovyをサポートしている。
- Gradle
- Groovyのビルドツール。Gradle.IncにOSSとして開発されている。InteliJが対応している。
- Apache Ant/Apache Mavenの考え方を引き継いでいるビルドツールだが、設定ファイルをXMLではなくGroovyで記述できる。
- Apache Antを呼び出せたり、Mavenの設定ファイルをGradle用に変換できたり、別のビルドツールから移行しやすい。
- Scala
- 主にJVM上で動作するマルチプラットフォームのプログラミング言語。
- ScalaはJVMで動作する。Scala.jsを利用すればScalaをJavaScriptにトランスパイルする。
- また、Scala Nativeを利用すれば、 JVMなしで動作できる。
- sbt
- Scalaのビルドツール。 Scalaコミュニティのデファクトスタンダード。Lightbend.Incにて、OSSとして開発されている。
- 設定ファイルをScalaベースのDSLで記述する。
- 変更を加えたファイルのみの再コンパイルやテスト自動実行などをサポートしている。
- Bazel
- Googleが開発するOSSのビルドツール。 Javaだけでなくさまざまな言語に多く対応している。(Python, Groovy, Scala, C#…)
- ビルドファイルはStarlark言語(Pythonの方言)を利用して記述する。
- クラウド上での分散並列ビルドを実現しており、非常に大規模なリポジトリで高速なビルドを行えるように設計されている。
参考資料