Mavenを使うと依存関係を解消してくれたり色々便利(らしい)。
ただ、最初は色々戸惑ったので、メモしておきます。
今回はStruts2でZero Configurationを目指します。
SpringやHibernateは追々やるとして、まずはMavenでStruts2の雛形を作りました。
開発環境は前回記載したものを使います。
Javaの開発環境構築
プロジェクト作成
コマンドプロンプト(cmd)
cd C:¥work¥workspace mvn archetype:generate -B -DarchetypeGroupId=org.apache.struts \ -DarchetypeArtifactId=struts2-archetype-convention -DarchetypeVersion=2.2.3 \ -DgroupId=ap -DartifactId=struts2
※「[INFO] BUILD SUCCESS」と表示されればOK
プロジェクト情報変更
C:¥work¥workspace¥struts2¥pom.xmlを編集
MacのJDKにはtools.jarがないので、自動判定でMacの場合はclasses.jarを、WindowsやLinuxの場合はtools.jarを使うようにします。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ap</groupId> <artifactId>struts2</artifactId><version>${project.version}</version><version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>Struts 2 Blank Convention Webapp</name> <properties><struts2.version>${project.version}</struts2.version><struts2.version>2.2.3</struts2.version> </properties> <profiles> <profile> <id>default-profile</id> <activation> <activeByDefault>true</activeByDefault> <file> <exists>${java.home}/../lib/tools.jar</exists> </file> </activation> <properties> <toolsjar>${java.home}/../lib/tools.jar</toolsjar> </properties> </profile> <profile> <id>mac-profile</id> <activation> <activeByDefault>false</activeByDefault> <file> <exists>${java.home}/../Classes/classes.jar</exists> </file> </activation> <properties> <toolsjar>${java.home}/../Classes/classes.jar</toolsjar> </properties> </profile> </profiles> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tooks</artifactId> <version>1.6.0</version> <scope>system</scope> <systemPath>${toolsjar}</systemPath> </dependency> <省略><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.4</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies> <省略> </project>
Eclipseプロジェクト作成
コマンドプロンプト(cmd)
cd C:¥work¥workspace¥struts2 mvn eclipse:eclipse -Dwtpversion=2.0
※「[INFO] BUILD SUCCESS」と表示されればOK
WARファイルインポート
コマンドプロンプト(cmd)
mvn war:inplace
※「[INFO] BUILD SUCCESS」と表示されればOK
Eclipseにインポート
Eclipseを起動して[ファイル][インポート]
インポート・ソース:Maven -> Existing Maven Projects Root Directory:/work/workspace/struts2
エラーと警告を解消
下のマーカーに出るエラーと警告を解消して行きます。
[警告]Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result.
プロジェクト名を右クリックして[プロパティー]
Deployment Assembly -> Add -> Java Build Path Entries -> Maven Dependencies
[警告]The tag handler class for “s:a” (org.apache.struts2.views.jsp.ui.AnchorTag) was not found on the Java Build Path
・/src/main/webapp/WEB-INF/content/hello.jspを編集
下記の行を一旦削除してから戻すと警告が出なくなる(なぜ?)
<s:a href="%{url}">English</s:a>
[警告]ビルド・パスは実行環境 J2SE-1.5 を指定しています。
プロジェクト名を右クリックして[プロパティー]
Javaのビルド・パス -> ライブラリー:J2SE-1.5 -> JavaSE-1.6
[エラー]Java compiler level does not match the version of the installed Java project facet.
プロジェクト名を右クリックして[プロパティー]
Project Facets -> Java:1.5 -> 1.6
[警告]インポートされた java.util.logging.Logger は 1 度も使用されていません
/src/main/java/struts2/InitListener.javaを編集
import java.util.logging.Logger; ↓ //import java.util.logging.Logger;
[警告]シリアライズ可能クラス HelloAction は long 型の static final serialVersionUID フィールドを宣言していません
[警告]シリアライズ可能クラス Index は long 型の static final serialVersionUID フィールドを宣言していません
取りあえず無視
[警告]No grammar constraints (DTD or XML schema) detected for the document.
取りあえず無視
[エラー]Validation Message
無視(すべてを選択削除)
動作確認
プロジェクトを右クリック -> デバッグ -> Debug on Server
http://localhost:8080/struts2/
※「Struts is up and running…」と表示されればOK