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

GlassFish&Junitの不具合

JavaEE(JSF+JavaBean+EJB+JTA)でアプリを製作しているのですが、EJBの部分のjunitができないことが判明しました。 正確に言うとラムダ式を使うと不具合がでます。原因としては …

no image

netbeansのJPQL補助機能

JPAでは基本的に生のSQLではなく、JPQLを使って書きます。 SQLでもタイプミスにイライラさせられることは多いのですが、JPQLはもっとですね・・・爆 そこで使えるのがNetbeansの入力補助 …

no image

イテレーターに関して

Javaの繰り返しでイテレーターという概念がありますね。 今はあまり使われなくなっているようですが、資格の勉強をしていたら出てきたのと、たしなみとして知っておく必要があるため、記述します。 ソース [ …

no image

CIことはじめ

業務でJavaのテキスト変換ツールを作成。 プログラムよりもCIツールを使って他人の環境下で正常に稼動させるためにどうするかの調査に時間かかりましたね。 今回やりたかったことは下記の通りです。いわゆる …

no image

glassfishとDB接続 ~CUI操作~

JavaEEではDBを使うときにglassfish内で設定が必要です。 基本的にはGlassFishでDB接続などのようにブラウザで管理画面から情報を入力することが可能です。 ただCUIや設定ファイル …