#java プロジェクト管理を学ぶ:そもそもビルドって何?
【超初心者向け】Maven超入門
そもそも、ビルドとは
-
ビルドとは、「ソースコードに問題(バグ)がないか解析を行い、問題がなければ実行できる形のファイルに変換し、組み立てること」
- コンパイルとの違い:コンパイルはビルド作業の中に含まれる作業の1段階
- コンパイル: プログラミング言語から機械が分かりやすい機械語に翻訳を行うことを指す。
-
ビルドの仕組みと流れ
- 1.各ソースコードの静的解析を行う。静的解析では、文法や構文の誤りを検出する(バグを見つける処理)
- 2.プリプロセッサで前処理を行う。定数の数値への置き換えやコメントの削除、マクロ(複数の操作をまとめて呼び出せるようにする機能)の展開
- 3.各ソースコードのコンパイルを行う。機械語に翻訳し、オブジェクトファイル(.o や.objなど)に変換する。
- 4.各オブジェクトファイルとライブラリをリンクする。全ての部品をリンクすることで、最終的に「実行ファイル」が完成する。
Mavenとは
- Mavenとは、プロジェクト(コードやリソースの集まり)をビルドしてアーティファクト(成果物)を得るためのツールです。
-
xmlを書くことで、機能:コンパイルの前後に依存するライブラリを自動でそろえる
-
ソースコードのコンパイルに加えて、コンパイルに必要なJARファイルを探したり・
-
ユニットテストを実行したり・
-
ビルドしたJARファイルを 公開したり
-
またMavenは「テストの前にコンパイル」「JARファイル作成の前にテスト」といった ビルド・ライフサイクル (作業の順番)
-
「依存元の前に依存先をビルド」といった 依存関係 をきちんと考えてビルドしてくれる
-
pom.xmlとは
Maven の設定は pom.xml という XML ファイルで記述する。
POM は、 Project Object Model の頭文字を取った略となっている。
Maven はビルド対象をプロジェクトという単位で管理する。
POM は、そのプロジェクトについての様々な設定を記述するためのファイルとなる。
★Mavenの優れている点は、依存関係の解決
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
</dependencies>
</project>
-
<dependencies>
の下の<dependency>
が、1つのアーティファクトを指している. -
このように宣言すると、 Maven はプロジェクトをビルドするときに自動的に
<dependencies>
で宣言したアーティファクトをリモートリポジトリからダウンロードしてきてくれて、クラスパスに追加してくれる => ライブラリを手で落としてくる手間が省ける -
さらに、リポジトリに格納されたアーティファクトには、それ自身の pom.xml も格納されている
もしプロジェクトで指定したアーティファクトの pom.xml に、さらに<dependencies>
があった場合、 Maven はその依存アーティファクトも自動的にダウンロードしてくれる => 芋づる式にすべての依存関係を解決してくれる仕組み -
Maven は、この仕組みのおかげで 依存ライブラリの管理が非常に楽 になった
Maven の前身である Apache Ant は依存関係を手動で管理しなければならかったので、非常に辛かった
この仕組みは、 Maven の後発である Gradle でも利用されている
参考にした記事一覧
「ビルド」機能とは?仕組みやコンパイルとの違いを解説
https://proengineer.internous.co.jp/content/columnfeature/6308