hakobera's blog

技術メモ。たまに雑談

SAStruts + S2JDBC の開発環境を maven2 + WTP で構築する手順

実は Doltengの出力する pom.xml で、そのまま mvn eclipse:eclipse しても駄目なんです。
試したのは 現時点(2009/03/01)で最新の Dolteng 0.36.0

Seasar2maven も大好きな自分としては悲しいです。
というわけで少し格闘してみたら、できたのでその手順を書いておきます。

以下、問題点と修正方法。

問題点

  • 依存関係の設定で、scope と exclusion の設定がないので、不要なjarファイル(servlet-api-2.3.jar)がクラスパスに入る

問題はないけど個人的に気になる点

  • 実行時に必要ない S2JDBC-gen が依存する jar ファイルもクラスパスに入ってしまう。こういうファイルは mavenでの依存関係の解決を止めて、lib フォルダーに jar をおくようにして欲しい。(というか、Dolteng が作るプロジェクトはそうなっているのに、maven ではそうならないのが問題。)

修正手順

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
        </dependency>
  • commons-logging-1.1が servlet-api-2.3 に依存しているので、これを排除するために exclustions を設定。
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1</version>
            <exclusions>
            	<exclusion>
            		<groupId>javax.servlet</groupId>
            		<artifactId>servlet-api</artifactId>
            	</exclusion>
            </exclusions>
        </dependency>
  • xml-api と xalan もいらないので、commons-digester と struts にexclusions を設定。
        <dependency>
            <groupId>commons-digester</groupId>
            <artifactId>commons-digester</artifactId>
            <version>1.6</version>
            <exclusions>
            	<exclusion>
            		<groupId>xml-apis</groupId>
            		<artifactId>xml-apis</artifactId>
            	</exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>struts</groupId>
            <artifactId>struts</artifactId>
            <version>1.2.9</version>
            <exclusions>
            	<exclusion>
            		<groupId>xalan</groupId>
            		<artifactId>xalan</artifactId>
            	</exclusion>
            </exclusions>
        </dependency>
  • お好みに応じて、WTPを2.0にバージョンアップし、ソースをダウンロードする設定を追加
<plugin>
	<artifactId>maven-eclipse-plugin</artifactId>
	<configuration>
		<wtpversion>2.0</wtpversion>
		<downloadSources>true</downloadSources>
	</configuration>
</plugin>

以上。

あと、S2JDBC-gen が依存するjarもmavenで解決したい場合は、scopeをtestに指定してダウンロードするようにしておいて、ローカルのmavenリポジトリからコピーするAntとか、バッチファイルとか作ればOKなはず。(試してないけど)

これで快適に開発できる。

上記設定を実施した例(プロジェクト名が abcの場合)

<?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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>abc</groupId>
	<artifactId>abc</artifactId>
	<version>0.0.1</version>
	<packaging>war</packaging>
	<name>abc</name>
	<build>
		<sourceDirectory>src/main/java</sourceDirectory>
		<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
		</resources>
		<testOutputDirectory>target/test-classes</testOutputDirectory>
		<testSourceDirectory>src/test/java</testSourceDirectory>
		<testResources>
			<testResource>
				<directory>src/test/resources</directory>
			</testResource>
		</testResources>
		<defaultGoal>validate</defaultGoal>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-source-plugin</artifactId>
				<executions>
					<execution>
						<id>source-jar</id>
						<phase>package</phase>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<plugin>
					<artifactId>maven-eclipse-plugin</artifactId>
					<configuration>
						<wtpversion>2.0</wtpversion>
						<downloadSources>true</downloadSources>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
	<pluginRepositories>
		<pluginRepository>
			<id>maven.seasar.org</id>
			<name>The Seasar Foundation Maven2 Repository</name>
			<url>http://maven.seasar.org/maven2</url>
		</pluginRepository>
	</pluginRepositories>
	<repositories>
		<repository>
			<id>local</id>
			<name>Local Repository</name>
			<url>file:repo</url>
		</repository>
		<repository>
			<id>maven.seasar.org</id>
			<name>The Seasar Foundation Maven2 Repository</name>
			<url>http://maven.seasar.org/maven2</url>
		</repository>
	</repositories>
	<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit-addons</groupId>
            <artifactId>junit-addons</artifactId>
            <version>1.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>antlr</groupId>
            <artifactId>antlr</artifactId>
            <version>2.7.7</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.7.0</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-digester</groupId>
            <artifactId>commons-digester</artifactId>
            <version>1.6</version>
            <exclusions>
            	<exclusion>
            		<groupId>xml-apis</groupId>
            		<artifactId>xml-apis</artifactId>
            	</exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>commons-el</groupId>
            <artifactId>commons-el</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1</version>
            <exclusions>
            	<exclusion>
            		<groupId>javax.servlet</groupId>
            		<artifactId>servlet-api</artifactId>
            	</exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-annotation_1.0_spec</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-ejb_3.0_spec</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-interceptor_3.0_spec</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jpa_3.0_spec</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jta_1.1_spec</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.0.69</version>
        </dependency>
        <dependency>
            <groupId>oro</groupId>
            <artifactId>oro</artifactId>
            <version>2.0.8</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>jboss</groupId>
            <artifactId>javassist</artifactId>
            <version>3.4.ga</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.13</version>
        </dependency>
        <dependency>
            <groupId>ognl</groupId>
            <artifactId>ognl</artifactId>
            <version>2.6.9-patch-20070908</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.0-FINAL</version>
        </dependency>
        <dependency>
            <groupId>org.seasar.container</groupId>
            <artifactId>s2-extension</artifactId>
            <version>2.4.34</version>
        </dependency>
        <dependency>
            <groupId>org.seasar.container</groupId>
            <artifactId>s2-framework</artifactId>
            <version>2.4.34</version>
        </dependency>
        <dependency>
            <groupId>org.seasar.container</groupId>
            <artifactId>s2-tiger</artifactId>
            <version>2.4.34</version>
        </dependency>
        <dependency>
            <groupId>org.seasar.sastruts</groupId>
            <artifactId>sa-struts</artifactId>
            <version>1.0.4-sp4</version>
        </dependency>
        <dependency>
            <groupId>struts</groupId>
            <artifactId>struts</artifactId>
            <version>1.2.9</version>
            <exclusions>
            	<exclusion>
            		<groupId>xalan</groupId>
            		<artifactId>xalan</artifactId>
            	</exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>