Mavenとは
JAVAを使ったアプリケーションを作るときには、
mavenとかgradleとかいうビルドツールを使って作るんだよ〜って、サイトで読んで、mavenプロジェクト作成してmvn installを実行してたんですが、
実際に何やってるのかよくわからなくて調べてみました。
そもそもビルドツールとは
ビルドツールについてよくわからないな、と思った根本原因は
「ビルドが理解できていない」ことだったと気づきました。
ビルドツールとは、ビルドに必要な作業を
すべてよしなに実行してくれるツールです。
でも、「ビルド」自体の内容をある程度理解していないと
結局ビルドツールも理解できないなと痛感したので
ビルドとはなんなのかをちゃんと調べてみることにしました。
ビルドとは
プログラミング言語で書かれたソースコードにバグ(異常)がないかを解析し、バグがなければソースコードを機械語に翻訳・リンクし、実行可能ファイルに変換して組み立てることです。
1つの作業のことを指すのではなく、解析から実行可能ファイルを組み立てるところまでの一連の流れのことを指します。
(引用:ビルドとは?仕組みや流れを解説)
らしいです。
このビルドという一連の流れには、
以下の4つのステップがあるみたいです。
1. ソースコードの静的解析
2. プリプロセッサでのコンパイル前処理
3. コンパイル処理
4. リンカでのリンク作業
1個ずつ見ていきたいと思います。
1. ソースコードの静的解析
静的解析では文法や構文の誤りを検出する、つまりバグを見つけるための処理が行われます。
自分が書いたソースの中に、
構文ミスなどがないかをチェックしてくれるみたいです。
2. プリプロセッサでのコンパイル前処理
「プリプロセッサ」でコンパイルのための前処理を行います。
前処理では、定数の数値への置き換えやコメントの削除、マクロの展開などが行われます。
この前処理は、行う言語と行わない言語があります。
JAVAではこのプリプロセッサでの処理は行わないらしいです。
3. コンパイル処理
コンパイラというプログラムを使って、ソースコードを機械語(オブジェクトコード)にコンパイルしていきます。
きいたことあるかもしれませんが、
JAVAのような人間用の言語(高水準言語)で書かれたソースコードを、機械用に変換してくれるやつです。
4. リンカでのリンク処理
リンカというプログラムを使って、複数のオブジェクトファイルやライブラリとリンクをします。
ちょっとよくわからなかったのでリンカについて調べてみたら
こんなことが書いてありました。
高水準言語によって書かれた複数のソースコードを、それぞれ機械語に翻訳(コンパイル)した時、それらはまだ実行できるプログラムではありません。これらを適切に配置するのがリンカであり、このようにプログラムの断片を適切に構成する作業をリンクと呼びます。
JAVAで書いたプログラムがコンパイルされて、
その後に良い感じに組み合わせてくれる作業で、この作業があって実行可能ファイル(ダブルクリックするとアプリケーションが起動するファイル、つまりexeファイル)ができるらしいです。
詳しくはまた今度調べてみようと思います。
こんな感じの4ステップを、ビルド(=自分が書いたソースコードの解析から実行可能ファイルを組み立てるところまでの一連の流れ)というらしいです。
(私は毎回、「ビルド」というキーワードを上記説明に置き換えて読むようにしてやっと理解すすみました...)
Mavenとは
JAVAのビルドツールです。
JAVAで書かれたソースコードのビルドを行ってくれます。
ただ、何もしなくても全部自動でやってくれる、というわけではなく、
最初にpomファイルという設定用のファイルを書く必要があります。
Mavenは、このpomファイルをもとにビルドをしてくれるみたいです。
pomファイルとは
pomファイルには、そのプログラム自体の情報(名前とかバージョンとか)とか、使いたいライブラリ(Springとかjunit)とかの情報を書く必要があるみたいです。
使いたいライブラリを書くと、
Mavenのセントラルリポジトリというところから自動でライブラリがダウンロードされ、ソースコード内で使うことができるようになります、すごい。
セントラルリポジトリとは
Mavenで使えるライブラリをまとめて管理してくれているwebサービスらしいです。
Maven Central Repository Searchで検索すると、
これ知ってる!といったライブラリがたくさんでてきます。
逆に、自分で作ったライブラリを使いたい!そしてチームにだけ公開したい!みたいなときは、プライベートリポジトリというものがあるらしいです。
プライベートリポジトリとは
何らかの理由でセントラルリポジトリにライブラリを公開したくない場合、自分でリポジトリを用意して利用できます。
このリポジトリのことをプライベートリポジトリと呼びます。
(引用:Mavenリポジトリ)
らしいです、便利ですね。
自分でプライベートリポジトリ立てたいとなったときにまた、
手順についてとか書ければと思います。
ビルド以外にもできることがある
基本的にビルドツールは、ビルドを実行してくれるツールでしたが、
Mavenに関してはテストやドキュメント生成機能なんかもあるらしいです。
ひとまずはこれくらい理解できればいいのかなと思ってます。
また、pomファイル書いたり、テストとかやって詳しくなれたら追記します。