2024
09
09
2010
08
17
Eclipse Web Tools PlatformとMavenの統合
http://japan.internet.com/column/developer/20080520/26.html からパクリ
はじめに
Eclipse Web Tools Platform(WTP)とM2Eclipse(M2)は別々のプロジェクトです。両者はいずれも、Eclipseを使って開発をする際に価値の高い機 能を提供します。WTPはWebおよびJava EEアプリケーション開発用のEclipseプラットフォームを機能拡張するツールセットで、一方のM2は、このIDEとMavenを密に統合します。こ の2つを同じプロジェクトで利用すると絶大な効果が得られますが、残念ながらまだ、WTPとM2を追加設定なしで統合することはできません。今回の記事で はこれについて取り上げます。この記事では、WTPとM2の統合ソリューションを使用して基本的なWebアプリケーションを開発していきます。プロジェクトのセットアップから配備ま での一連の構築手順を紹介するので、EclipseベースのJava Web開発を効率化するための参考にしていただけると幸いです。
環境のセットアップ
今回のプロジェクトでは、主な開発環境としてEclipseを使用します。後述の手順を行うためには、以下のテクノロジをEclipseの環境に含める必要があります。- WTP 2
- M2 Plugin
- Java 5の最新バージョン
- Tomcatの最新バージョン
- Maven 2インストールの設定ファイル(apache-maven-2.0.8¥confフォルダから入手可能)
補足説明1 より完成度の高いEclipse環境のために
Eclipse環境に追加すると作業期間の短縮に役立つテクノロジを表1に示します。
ここでは、私がツールボックスに追加しておきたいと思うプラグインを紹介しましたが、このすべてを以降の手順で使用するわけではありません。実際のところ、WTP2とM2は必ず使用しますが、その他のプラグインはどれも必須ではありません。
上記のアップデートURLからインストールされる機能のなかには相互参照を含むものがあるため、依存関係をインストールした後にアップデートが必要な場合があります。
表1 Eclipse環境の充実度を高めるその他のテクノロジ
プラットフォーム/プラグイン | URL | メモ |
WTP 2 | http://download.eclipse.org/webtools/downloads | オールインワンバージョン |
Sysdeo | http://www.eclipsetotale.com/tomcatPlugin.html | Tomcatプラグイン |
Hibernateツール | http://www.hibernate.org/255.html | Hibernateプラグイン |
Checkstyle | http://eclipse-cs.sourceforge.net/update | アップデートURL |
PMD | http://pmd.sourceforge.net/eclipse | アップデートURL |
Spring IDEとAspectJ開発ツール、およびMylyn | http://springide.org/updatesite | アップデートURL |
Buckminster | http://www.eclipse.org/buckminster/ | プロジェクトURL |
Subclipse | http://subclipse.tigris.org/update_1.2.x | アップデートURL |
M2プラグイン | http://m2eclipse.codehaus.org/update | アップデートURL |
上記のアップデートURLからインストールされる機能のなかには相互参照を含むものがあるため、依存関係をインストールした後にアップデートが必要な場合があります。
WTPとM2プラグインの設定
まず最初に、初期サーバー、ブラウザ、そしてMavenを設定する必要があります。M2プラグインを使用してEclipseを起動すると、 settings.xmlファイルに関するエラーメッセージが表示されます。このメッセージは無視してください。問題はこの後すぐに解決します。サーバーの設定
Webアプリケーションの実行に使用するサーバーを設定します。Eclipseメニューから [Windows]→[Preferences]→[Server]→[Installed Runtimes]→[add]の順にクリックしてサーバーを設定してください(図1)。図1 サーバーの設定: 順にクリックしてサーバーを設定
![図1 サーバーの設定: 順にクリックしてサーバーを設定 図1 サーバーの設定: 順にクリックしてサーバーを設定](http://japan.internet.com/developer/img/article/2321/2321_01.gif)
ブラウザの設定
WTPを使ってWebアプリケーションを起動すると、WTP内部のブラウザが開きます。外部のブラウザを選択してそこにWebアプリケーションを開きた い場合は、Eclipseのメニューから[Window]→[Web Browser]の順にクリックして、外部のブラウザが起動するように設定してください。Maven2の設定
Eclipseで[Menu]→[Window]→[Preference]の順にクリックし、左側のパネルで[Maven]をクリックします。このと きしばらく時間がかかる場合がありますが、そのままお待ちください。[User Settings file]フィールドに入力されているファイルパスをメモし(図2)、この場所にsettings.xmlファイルが存在することを確認します。 settings.xmlがない場合はapache-maven-2.0.8¥confからファイルをコピーします。[OK]ボタンをクリックしてくださ い。ここまで終われば、動的なWTPプロジェクトを作成し、M2プラグインを統合する作業にとりかかることができます。
プロジェクトのセットアップ
以降では、WTPの動的Webアプリケーションプロジェクトを作成し、M2プラグインを使用してMavenのサポートを有効化します。具体的には、以下の作業について詳しく説明していきます。- プロジェクトのフォルダ構成とJavaのビルド設定をMavenに合わせて変更する
- 特定のWTPメタデータファイルをMavenに合わせて変更する
- WTPがpom.xmlを使用するように設定する
Maven Webプロジェクトの作成
[File]→[New]→[Other]→[Maven]→[Maven Project]の順に選択し、[New Maven2 project]ウィザードを起動します。表2に示す値をウィザードの各ページに入力します。赤字で示した部分以外は、デフォルト値をそのまま使用してく ださい。表2 Maven 2プロジェクト作成時の入力値
ページ | データ |
ページ1 | |
Project Name | tempForRef |
[Create in Workspace]ラジオボタン | このボタンを選択 |
ページ2 | |
Group ID | tempForRef |
Artifact ID | tempForRef |
Version | 0.0.1-SNAPSHOT |
Packaging | war |
Description | 空白、または適切な説明を入力 |
Project Layout | src/main/java、src/main/resources、src/test/java、src/test/resources、src/main/webappのチェックボックスをオンにする |
ページ3 | 変更なし |
M2プロジェクトが作成できたので、次は動的Webプロジェクトを作成します。
動的Webプロジェクトの作成
[File]→[New]→[Other]→[Web]→[Dynamic Web Project]の順にメニューを選択して、動的プロジェクトを新規作成します。プロジェクト名をsample1にし、それ以外はすべてデフォルトのまま にします。Java EEパースペクティブに進むかどうか聞かれたら、[Yes]をクリックして先に進みます。表3に各ページの値を示します。値の入力が必要なのはプロジェクト名だけです。
表3 動的Webプロジェクト作成時の入力値
ページ | データ |
ページ1 | |
Project Name | sample1 |
Project Contents | デフォルト値を使用(ディレクトリ) |
Target Runtime | Apache Tomcat v6.0 |
Configurations | Apache Tomcat v6.0のデフォルトの設定 |
ページ2 | |
Dynamic Web Module | デフォルト値を使用 |
Java | デフォルト値を使用 |
ページ3 | |
Context Root | sample1 |
Content Directory | WebContent |
Java Source Directory | src |
Mavenの有効化
プロジェクトを右クリックし、ポップアップメニューで[Maven]→[Enable Dependency Management]の順に選択してMavenを有効化します。POM作成ウィザードが起動します(図3)。図3 POM作成ウィザード:POM作成ウィザードを起動してMavenを有効化
![図3 POM作成ウィザード:POM作成ウィザードを起動してMavenを有効化 図3 POM作成ウィザード:POM作成ウィザードを起動してMavenを有効化](http://japan.internet.com/developer/img/article/2321/2321_03.gif)
統合を完了するために、Mavenを有効化した後で以下の手順も実行する必要があります。
- Mavenのフォルダ構成を作成する
- ソースフォルダを更新する
- WTPの内部をいくつか自分で調整する
- J2EEモジュールの依存関係を設定する
Mavenのフォルダ構成の作成
[Window]→[Show View]→[Other]→[General]→[Navigator]の順に選択してナビゲータビューを開きます。動的プロジェクトのフォルダ構成 は、デフォルトではMavenと異なっており、これが統合を妨げています。プロジェクトのフォルダ構成を、Mavenの典型的な構成に変更してください。 これには以下の2とおりの方法があります。- ナビゲータビューを使用して、先ほど作成したMavenプロジェクト(tempForRef)に移動します。srcフォルダとtargetフォル ダをコピーします。再度ナビゲータビューでsample1プロジェクトに移動し、そこにフォルダを間違えないように貼り付けます。
- [File]→[New]→[Folder]の順に選択して、src/main/java、src/main/resources、src /main/webapp、src/test/java、src/test/resources、target/classes、target /test-classesの各フォルダを作成します。
ソースフォルダの更新
動的プロジェクトのJavaビルド設定(ソースフォルダとアウトプットフォルダ)も、デフォルトではM2との統合が可能な状態ではありません。Java コード用のソースフォルダの設定が必要です。これは手動でやることも、メニューから自動的に設定することもできます。手動であれば、わずかな手間ですべて の設定を一度に行えるので、ここでは手動で行うことにします。sample1プロジェクトで、ナビゲータビューを使用して.classpathファイルを開きます。このファイルの内容は以下のようなものです。
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> <classpathentry kind="output" path="build/classes"/> </classpath>
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src/main/java"/> <classpathentry kind="src" path="src/main/resources"/> <classpathentry kind="src" output="target/test-classes" path="src/test/java"/> <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> <classpathentry kind="output" path="target/classes"/> </classpath>
注意
実際の.classpathファイルに記述されたTomcatのバージョンは、これとは異なる可能性があります。編集時にTomcatの情報を書き換えないでください。また、編集後は必ず保存してください。
WTP内での手動調整
ソースフォルダを更新した後、より確実に統合させるためにいくつか調整を加える必要があります。ナビゲータビューでプロジェクトを開 き、.settings/org.eclipse.wst.common.componentファイルを編集します。必要に応じてエディタで [Source]タブを開き以下を操作します。- /WebContentを/src/main/webappに変更する
- build/classesをtarget/classesに変更する
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>
<?xml version="1.0" encoding="UTF-8"?> <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="sample1"> <wb-resource deploy-path="/" source-path="/src/main/webapp"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <property name="context-root" value="sample1"/> <property name="java-output-path" value="target/classes"/> </wb-module> </project-modules>
/WebContentの下のMETA-INFフォルダとWEB-INFフォルダを、src/main/webappへ慎重に移動します。ナビゲータビューでWebContentフォルダとbuildフォルダを削除します。
J2EEモジュールの依存関係の設定
プロジェクトを右クリックし、ポップアップメニューから[Properties]を選択して、プロジェクトのプロパティを表示します。左側のパネルで [J2EE Module Dependencies]を選択し、画面(図4)に表示されるチェックボックスをオンにして、maven2の依存関係をJ2EEモジュールの依存関係に 関連付けます。その他のチェックボックスは無視してください。[Apply]ボタンをクリックすると、図4に表示されている警告が消えます。
ここまでの手順を見直して、すべて正しく行われていることを確認してください。この時点で、Eclipseの[Problem]ビューに、 sample1プロジェクトとtempForRefプロジェクトに関するエラーメッセージや警告は何も表示されていないはずです。次からはいよいよ開発作 業に入ります。
いよいよ開発作業へ
以降では、Mavenを使用し、jarを追加してクラスパスを変更するというM2プラグインの基本的な作業を主に取り上げます。エディタやリポジトリ検 索ツールを使ってpom.xmlファイルを編集する方法や、Mavenのゴールを起動する方法を説明します。さらに、「Maven化」されたプロジェクト を、WTPを使用して起動およびデバッグする方法も紹介します。ここでは短めのコードを作成して、ごく簡単なMVCアプリケーションを完成させます。このアプリケーションがタグライブラリ関連の問題を起こさずに確実に動作するようにするため、以降の手順ではdisplaytagライブラリを使用します。
依存関係の管理
最初に依存関係をいくつか追加します。プロジェクトを右クリックし、ポップアップメニューから[Maven]→[Add Dependencies]の順に選択してリポジトリ検索を起動してください。ここに「tomcat」と入力し、強調表示されたservlet-api jar(図5)を選択して[OK]ボタンをクリックすると、POMにjarが追加されます。図5 依存関係を追加するリポジトリの検索: 最初に依存関係をいくつか追加
![図5 依存関係を追加するリポジトリの検索: 最初に依存関係をいくつか追加 図5 依存関係を追加するリポジトリの検索: 最初に依存関係をいくつか追加](http://japan.internet.com/developer/img/article/2321/2321_05.gif)
provided
を挿入します(図6)。うまくいかない場合は、正しい場所に直接<scope>provided</scope>
と入力してください。図6 POMエディタ:エディタ標準のコンテンツアシストを使用し、scopeにprovidedを挿入
![図6 POMエディタ:エディタ標準のコンテンツアシストを使用し、scopeにprovidedを挿入 図6 POMエディタ:エディタ標準のコンテンツアシストを使用し、scopeにprovidedを挿入](http://japan.internet.com/developer/img/article/2321/2321_06.gif)
<?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>sample1</groupId> <artifactId>sample1</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <description></description> <dependencies> <dependency> <groupId>tomcat</groupId> <artifactId>servlet-api</artifactId> <version>5.5.15</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <dependency> <groupId>displaytag</groupId> <artifactId>displaytag</artifactId> <version>1.1.1</version> </dependency> </dependencies> </project>
test
を挿入し、Tomcatではscopeにprovided
を挿入します。注意
WTPで開発する場合、servlet-api jarは特に必要ありませんが、Maven 2のゴールをコマンドラインから実行するためには必要です。
次回同じ検索を実行すると、新しく追加された依存関係が赤く表示されるため、pom.xmlファイルにこれが存在することがわかります(図7)。追加した依存関係は、削除しなければ再度追加することはできません。図7 リポジトリ検索による既存の依存関係の強調表示: 新しく追加された依存関係が赤く表示される
![図7 リポジトリ検索による既存の依存関係の強調表示: 新しく追加された依存関係が赤く表示される 図7 リポジトリ検索による既存の依存関係の強調表示: 新しく追加された依存関係が赤く表示される](http://japan.internet.com/developer/img/article/2321/2321_07.gif)
Maven実行の設定
Maven実行の設定をsample1.packageという名前で作成します。これには図8に赤い円で示したツールバーボタンを使います。続いて [Open External Tools Dialog]をクリックします。画面の指示に従い[Maven Build]を選択してMaven実行の設定を新規作成し、図8に赤い矢印で示したボタンをクリックします。[Base directory]を設定するには[Browse Workspace]を、[Goals]を設定するには[Select]をそれぞれ選択します。このサンプルではMaven実行の設定に以下の値を使用します。
- Name: sample1.package
- Base Directory: ${workspace_loc:/sample1}
- Goals: package
この操作を一度実行すれば、次回からはツールバーメニューのドロップダウンで素早くアクセスできます(図9)。
図9 最近使用したMaven実行の設定: 設定に素早くアクセス可能
![図9 最近使用したMaven実行の設定: 設定に素早くアクセス可能 図9 最近使用したMaven実行の設定: 設定に素早くアクセス可能](http://japan.internet.com/developer/img/article/2321/2321_09.gif)
ここまで進んだら、次はコードを追加します。
コードの追加
サーブレットとJavaServer Page(JSP)は、[File]→[New]→[Other]→[Web]の順に選択して表示されるウィザードで作成できます。このウィザードを使っ てサーブレットを作成した場合は、web.xmlにサーブレットが登録されているはずなので確認してください。もし登録されていなければ、サンプルアプリ ケーションのダウンロードファイルに含まれているweb.xmlを利用してください。この簡単なサンプルアプリケーションでは、index.jspからサーブレットに転送され、さらにそこからビューのJSPへと転送されます。このアプリ ケーションでは、displaytagタグライブラリを使用したテーブルの表示も行います。ダウンロードファイルに収録されているコードを使用すれば、こ のアプリケーションを簡単に作成できます。zipファイルを解凍し、srcフォルダの内容をsample1プロジェクトのsrcフォルダにコピーしてくだ さい。この他にコードに関連するファイルはpom.xmlファイルだけです(いずれにしても、このファイルはsrcフォルダの外に置かれます)。
WTPからのWebアプリケーションの起動
それでは、デバッグ機能を使ってみましょう。以下の手順を実行してください。- doGetMethodサーブレットにブレークポイントを設定します。
- プロジェクトを右クリックし、[Debug As]を実行してアプリケーションを起動します(図10)。
- [Debug on Server]を選択します。
- [Choose an existing server]を選択できない場合は、[Manually define a new server]を使用します。
図10 Webアプリケーションの起動:プロジェクトを右クリックし、「Debug As」を実行してアプリケーションを起動
![図10 Webアプリケーションの起動:プロジェクトを右クリックし、「Debug As」を実行してアプリケーションを起動 図10 Webアプリケーションの起動:プロジェクトを右クリックし、「Debug As」を実行してアプリケーションを起動](http://japan.internet.com/developer/img/article/2321/2321_10.gif)
Eclipseによってブラウザが呼び出され、アプリケーションが表示されます。ブレークポイントを設定した場所によっては、Debugパースペクティ ブが表示される場合もあります。また、実行時にブレークポイントを設定して結果を見ることもできます。あるいは、[Run As]→[Run On Server]を選択して同じように起動することも可能です。
WTPとM2プラグインの統合の確認
出力およびデバッグセッションの様子から、統合が成功しているかどうかを確認できます。注意
サーブレット、単純なクラス、あるいはJSPに変更を加えると、出力が大きく変化しますが、これはWTPがすべての変更をサーバーに送出しているからで す。この機能が必要ない場合は、いつでもサーバーを停止するか、前述のサーバービューでサーバーを削除してかまいません。Mavenゴールである packageを実行しても、この機能に一切影響はありません。実際、その他すべてのMavenゴールも同じように実行することが可能です。
その他の重要なポイント
M2Eclipseプラグインは便利なだけでなく、WTPと確実に統合させることもできます。ただし、そのためには、たとえ今回使ったようなごく簡単なWebアプリケーションプロジェクトの場合でも、いくつか設定が必要になります。以下に、M2とWTPを統合する際に、この記事で解説したテクニックに加えて頭に入れておくべき重要なポイントを紹介します。
- .classpathファイルを保持する必要はありません。また、以前にMaven Eclipseプラグインで使用されていたeclipse:eclipseゴールを使用する必要もありません。pom.xmlは個々のjarを理解するた めの有効なメタデータとして使用されるため、.classpathの方が内容はかなり少なくなります。リポジトリから参照されるすべてのjar が.classpathに含まれるわけではありません。
- WTPとM2の統合において重要なのは、フォルダ構成やJavaのビルドパス設定、および.settings/org.eclipse.wst.common.componentファイルを理解することです。
- ワークスペース内の.metadata¥.plugins¥org.eclipse.wst.server.core¥フォルダを調べれば、配備 した実際のアプリケーションについてすべてを学ぶことができます。[Run on Server]の実行時にWebアプリケーションが実際にアセンブルされる場所を見つけるには、サブフォルダを調べることも必要になります。詳しく調べれ ば、アセンブルされるアプリケーションのWEB-INF/libフォルダ内に、servlet-api jarやJUnit jarが存在しないことがわかります。その理由は、servlet-api jarのscopeには
provided
が、JUnit jarのscopeにはtest
がそれぞれ設定されているからです。M2プラグインの以前のビルドでは、この件で問題が起きていました。 - Maven 2を使用する場合、
MAVEN_HOME
などの環境変数は、JAVA_HOME
(およびそのパス)を除き一切必要ありません。また、JAVA_HOME
が必要なのはMaven 2をコマンドラインから実行する場合だけです。 - M2プラグインはMaven Embedderと呼ばれるMavenのコンポーネントを使用します。これはMaven バージョン2.1以降、コマンドラインインターフェース(CLI)で使用されています。
- Mavenを統合したまま非IDEベースで通常のビルドプロセスを実行する場合、Mavenをコマンドラインから使用する必要があります。 Mavenをコマンドラインから実行し、WebアプリケーションをTomcatに配備する場合は、Maven 2のマニュアルやMaven 2の書籍、『Better Builds with Maven』を参照してください。
PR
2010/08/17 (Tue.) Trackback() Comment(0) eclipse
Comments
Trackback
Trackback for this entry: