skillup

技術ブログ

Java

Javaビルドツール

投稿日:

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

src/main/java            Javaソース
src/main/resources    ソース以外のアプリケーションに必要なファイル(*.properties等)
src/main/config         設定ファイルなど
src/main/webapp      Webアプリケーションファイル(WARプロジェクトのみ)。直下にWEB-INFがある。
src/test/java             ユニットテスト
src/test/resources     ユニットテスト時に利用されるリソースファイル。デプロイ時には適用されない。
src/site                     プロジェクト用Webサイトの構築時に利用されるファイル

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/

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

http://qiita.com/Mura-Mi/items/225825cc3715dc04d923

-Java
-

執筆者:


comment

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

関連記事

no image

日付けのメソッド

どのプログラムでも必須となる日付け処理。 言語が違うといろいろと面倒です。 とりあえず頻出のものを整理したいと思います。 Contents1 現在時刻の出力2 日付けの設定・取得3 日付けの整形4 文 …

no image

JSFでのCSVダウンロード機能

JSF+CDIでCSVダウンロード機能を実装するときの処理です。 結構、汎用的でいろんなところででてきますね。 Contents1 コード2 参考リンク コード [crayon-5d8675bcd55 …

no image

Git→Jenkinsの連携 その2

以前、このエントリーでGitとjenkinsの連携に関して書いたんですが、今回jenkinsとgitのソースが別環境にあるケースの構築をしたのでメモしておきます。 Contents1 Jenkinsで …

no image

Mapの使い方

Javaに限らずプログラミングで最も大切になるのは配列の処理でしょう。 Javaですと、PHPのような連想配列の代わりにMapを使用します。 Contents1 Mapとは?1.1 Mapのインスタン …

no image

型パラメータに関して

Javaでの型パラメータについて書きたいと思います。 Contents1 基本の型パラメータ2 型パラメータの制限(ある型を継承した場合) 基本の型パラメータ Sample.java [crayon- …