skillup

技術ブログ

Java

Javaビルドツール

投稿日:2015年4月4日 更新日:

JavaではPHPやRubyなどといったインタプリタ言語とは違い、ソースはクラスファイルといわれるファイルに変換する必要があります。この作業をコンパイルと呼びます。最低限この作業をやらないとプログラムとして機能しません。

また複雑なソースになりますと、コンパイルだけではだめで、テストをしたり、以前のファイルを削除したり、jarファイルとしてまとめたりします。このような一連の作業を行う一括で行うツールをビルドツールと呼びます。

ビルドツール

私もJavaを学習したての一番最初のころはコマンドプロンプトで作業をしていました。単純なファイルだったらこれでよいですが、実務で使われるようなファイルをこのように対応するのは無理でしょう。

これがまたかなり面倒で、なれないうちはイライラの元であり、私もJavaが嫌いになりそうでした(汗)手作業で無理、と思った方が次に考えるのはバッチやシェルスクリプトなどかと思います。

ただ自分の手で作ったものですとカスタマイズでき、柔軟性がある反面、どこかしらにエラーや漏れがあることが多いです。また似たような処理をみんなが行うことからJavaでは下記のようなビルドツールが一般的です。

Ant

古くから使われているビルドツールです。build.xmlというxmlファイルにタスクを定義しておき、コマンドラインから ant -f  compile などと打って実行をします。ファイルの構成は下記のような流れです。

基本的には1つの実行単位をプロジェクトと定義し、<project>タグで囲みます。その中で実際に行う1つ1つのタスクをtargetといいます。

(下記が)イメージです。

targetのプロパティはname(名称)だけでなく、下記のようなプロパティが追加できます。

属性 説明 必須
name ターゲットの名前 必須
depends 依存しているターゲット ×
if ターゲットを実行するために設定されていなければならないプロパティ名 ×
unless ターゲットを実行するために設定されていてはならないプロパティ名 ×
description ターゲットの機能の簡単な説明 ×

また1つ1つのtargetのなかには値をプロパティとして保存させたり、xml形式で実行させたいコマンドを定義できます。

このbuild.xmlをant  でコマンドラインからたたくとHello,worldが表示されます。

ちなみに下記リンクを参考にしました。

http://www.javadrive.jp/ant/buildxml/index1.html

Maven

Antの機能を内包し、さらに機能が拡張されたのがmavenです。下記のような特徴があります。

  • Antの機能は全て内包している
  • 単なるビルドツールだけではなく、プロジェクト管理ツールでもある
  • プラグインの依存管理を一元化できる
  • ソース変更履歴管理などの機能を有する

mavenを使用した場合、下記のようにメインのソースコートとテストコードが分かれることが一般的です。

pom.xmlについて

Antがbuild.xmlでビルドを定義するようにmavenではpom.xmlというファイルでタスクを定義します。

基本的にはプロジェクトの情報をXML形式でもち、以下のようなプロパティが設定されます。

  • modelVersion     POM のバージョン。 特に変更する必要はありません。
  • groupId             プロジェクトを一意に識別する名前。 プロジェクトのルートパッケージ名を指定するのが一般的です。
  • artifactId           プロジェクトの成果物の名前。 作成する JAR や WAR, EAR ファイルなどの名前に使用されます。
  • packaging          作成する成果物のパッケージング・タイプ。 jar (デフォルト), war, ear などがあります。
  • version              プロジェクトのバージョン。
  • name                プロジェクトの表示名。 ドキュメントを作成するときなどに使用されます。
  • url                    プロジェクトのサイトの URL。 ドキュメントを作成するときなどに使用されます。
  • dependencies     プロジェクトが依存するライブラリの情報。←ここに依存ライブラリを書くため、追加することが多い。dependenciesについてJunitへの依存性はディフォルトで行われる。

dependenciesの中に書かれるscopeというタグは依存するライブラリがいつクラスパスに通されるかを指定できます。

となっていたらtest時にクラスパスに通されます。

scope に指定できる値とその意味は以下の通りです:

  • compile            scope の指定を省略した場合のデフォルト値です。全ての状況でクラスパスに追加されます。
  • provided          ライブラリが JDK やコンテナによって提供される場合に指定します。コンパイル時のみクラスパスに追加されます。
  • runtime           実行時のみに必要な場合に指定します。テストの実行および通常の実行のときにクラスパスに追加されます。
  • test                 テストのときのみ必要な場合に指定します。テストのコンパイルと実行のときにクラスパスに追加されます。
  • system            明示的にクラスパスに追加する場合に指定します。このスコープのライブラリは常に有効であるとみなされ、リポジトリの検索は行われません。

スコープに関してはくわしくはこちら

http://www.techscore.com/tech/Java/ApacheJakarta/Maven/3/

プラグインを設定したい場合はbuildタグ以降に下記のように書くことが多いです。
ちなみにpom.xmlに書かない場合はコンソールからコマンドを打ち込むときに引数を渡
します。

参考URL  http://www.techscore.com/tech/Java/ApacheJakarta/Maven/2-2/

↓まとまりという点ではここが一番わかりやすいかも・・

Java製アプリを Eclipse から実行したことしかない新人に「ビルドツールとは?」を説明してみる…そして CI へ

-Java
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

JPAでの多対多のリレーション

以前、このエントリーでJPAのリレーションについて説明しました。 今回は多対多について説明します。 Contents1 テーブル構成2 ソース2.1 CDのエンティティ2.2 Artistのエンティテ …

no image

JPAでの算術関数の型&mavenコンパイルプラグイン

本日も小ネタなので2つ同時に扱います。 Contents1 JPAの算術関数2 mavenのコンパイル JPAの算術関数 JPAでは以前、MySQLなどと同じように算術関数を使えると書きました。 参考 …

no image

Mapからインスタンス変数、インスタンス変数からMapへ

Javaで変数を引き回すときにMapからインスタンス、インスタンスからMap、あるインスタンスから別のインスタンスに変数を差し替える作業って結構多いと思います。 これって普通にやるとMapのget,p …

no image

jenkins構築

いままでjenkinsについての記事を書いていなかったので記録しておこうと思います。 Contents1 前提条件2 jenkins構築3 設定ファイル変更(ポート&URL変更)4 セキュリティ有効化 …

no image

arquillianでのリソースファイル読み込み

以前、このエントリーでarquillianからライブラリが利用できず、追加のライブラリを導入した、ということを書きました。 実はリソースファイルもそのままですとarquillianからは使用できません …

アーカイブ