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

HTML&JSなど画面まわり&サーブレット小ネタ

サーブレットでアプリ作ってますが、画面まわりに関していろいろいじっているのでそこら辺のネタなんかを。 Contents1 テーブルの結合2 JSPでの動的HTML→POSTで認識できない3 動的プルダ …

no image

ページャープラグイン dataTable

レコードを一覧表示する上で意外と面倒くさいのがページャーでしょう。 自力で作成してもよいのですが、なかなかこれが面倒だったりします。 また近年ではリンクを踏ませずに、スクロールするだけで表示ができる形 …

no image

Javaのオブジェクト指向に関して

Contents1 staticメソッド2 アクセス修飾子3 抽象クラス3.1 オーバーライド(親クラスのメソッドを上書きすること)3.2 オーバーロード(同名メソッドを複数もつこと)4 interf …

no image

データベース文字コード対策他

Contents1 JDBC文字化け対策2 BigDecimal2.1 ソース2.2 参考リンク3 CreateQuery4 jsfのconvertNumber JDBC文字化け対策 データベースがu …

no image

Fileオブジェクトの操作

業務でテキストファイルを読み込んで、別形式に変換して出力みたいなアプリを作ったときにファイルオブジェクトについていろいろ調べたんでまとめておきます。 Contents1 ファイルオブジェクトとは?2 …