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
