EclipseでMaven2とTomcatプラグイン

EclipseMaven2(m2eclipse)とTomcatプラグインを上手に使う方法はないかなーと思って、s2struts-blankで試行錯誤。

結局、mnv packageを実行したときにtaget/s2struts-blank/WEB-INFみたいな感じでtargetの下にwarに固める前の構成がそのままできるので、それぞれのソースの出力先を無理やりそこに合わせることにしてみた。

ディレクトリ構成は下のような感じにして

s2struts-blank
├─src
│  └─main
│      ├─java              ← output s2struts-blank/target/s2struts-blank/WEB-INF/classes
│      ├─resources         ← output s2struts-blank/target/s2struts-blank/WEB-INF/classes
│      └─webapp            ← output s2struts-blank/target/s2struts-blank
│          └─WEB-INF
│              ├─classes
│              └─lib
└─target
    ├─classes
    └─s2struts-blank
        ├─META-INF
        └─WEB-INF
            ├─classes
            └─lib

pom.xml build finalNameを指定してwarを作るときにバージョンが入らないようにしてみた

<?xml version="1.0" encoding="UTF-8"?><project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.seasar.struts</groupId>
  <artifactId>s2struts-blank</artifactId>
  <packaging>war</packaging>
  <version>0.0.1</version>
  <description></description>

  <build>
    <finalName>s2struts-blank</finalName>
  </build>

  <repositories>
    <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>org.seasar.struts</groupId>
      <artifactId>s2-struts</artifactId>
      <version>1.2.5</version>
      <type>jar</type>
    </dependency>
    <dependency>
      <groupId>org.seasar.dao</groupId>
      <artifactId>s2-dao</artifactId>
      <version>1.0.35</version>
      <type>jar</type>
    </dependency>
  </dependencies>

</project>

.classpath m2eclipseの恩恵を受けてこんなにシンプルに

<classpath>
	<classpathentry output="target/s2struts-blank" kind="src" path="src/main/webapp"/>
	<classpathentry kind="src" path="src/main/java"/>
	<classpathentry kind="src" path="src/main/resources"/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
	<classpathentry kind="var" path="TOMCAT_HOME/common/lib/servlet-api.jar"/>
	<classpathentry kind="var" path="TOMCAT_HOME/common/lib/jasper-runtime.jar"/>
	<classpathentry kind="var" path="TOMCAT_HOME/common/lib/jsp-api.jar"/>
	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
	<classpathentry kind="output" path="target/s2struts-blank/WEB-INF/classes"/>
</classpath>

.tomcatplugin rootDirを/target/s2struts-blankにしているところがポイント

<?xml version="1.0" encoding="UTF-8"?>
<tomcatProjectProperties>
    <rootDir>/target/s2struts-blank</rootDir>
    <exportSource>false</exportSource>
    <reloadable>false</reloadable>
    <redirectLogger>false</redirectLogger>
    <updateXml>true</updateXml>
    <warLocation></warLocation>
    <extraInfo></extraInfo>
    <webPath>/s2struts-blank</webPath>
</tomcatProjectProperties>

とそれぞれのファイルは上にように設定されている。
mvn package
を実行したら、
s2struts-blank/target/s2struts-blank/WEB-INF/libの下に必要なjarが配置されるので
一応Maven2の恩恵にもあずかれているはず。
あとこの構成ならHOTdeployも問題なしのはず。。。

ただ、ソース出力先が入れ子になってるところがちょっとあやしいのと、projectをcleanしたらjarが削除されてしまうので、その都度、mvn packageをしないといけない。。。


というかtomcat-maven-pluginを使えばもっと便利になるのかも。。。ちょっと調べてみようかな。。。っというか誰かもっと良い方法をすでに提供してくれてるかも。。。そっちのほうを先に調べてみようかな。