Mavenメモ - Eclipseとの連携

作成 2004/7/20

Maven導入したいんですが、Webアプリケーションの開発でEclipseと連携できないとイヤンです。Eclipse用の(Mavenの)プラグインとして、Maven Eclipseプラグインがあります。このプラグインは、Eclipseの.projectや.classpathファイルを生成するものです。ここでは、簡単なStrutsアプリケーションを作成してみました。

使ったツール

使ったプラグイン

Mavenを使いつつEclipse上でStrutsアプリケーションを開発する

プロジェクトを作る

とりあえずmavenのプロジェクトを作成します。ここではswebという名前のプロジェクトを作成しました。

C:\project\etc\maven4\sweb>maven genapp
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0

Enter a project template to use: [default]

Please specify an id for your application:  [app]
sweb
Please specify a name for your application:  [Example Application]

Please specify the package for your application:  [example.app]
hoge
build:start:

genapp:
    [copy] Copying 1 file to C:\project\etc\maven4\sweb\src\java\hoge
    [copy] Copying 3 files to C:\project\etc\maven4\sweb\src\test\hoge
    [copy] Copying 1 file to C:\project\etc\maven4\sweb
    [copy] Copying 2 files to C:\project\etc\maven4\sweb
BUILD SUCCESSFUL
Total time: 18 seconds
Finished at: Tue Jul 20 22:46:02 JST 2004

struts用のdependencyを追加

project.xmlのdependencies要素にstrutsで利用するJARを追加します。 ここでは最小構成(のつもり)です。使うのであれば、validatorやfileuploadのJARも追加します。

  <!--<dependencies/>-->
  <dependencies>
        <dependency>
            <id>servletapi</id>
            <version>2.3</version>
        </dependency>

        <dependency>
            <id>struts</id>
            <version>1.1</version>
            <type>jar</type>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>


        <dependency>
            <id>commons-beanutils</id>
            <version>1.6.1</version>
            <type>jar</type>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>

        <dependency>
            <id>commons-collections</id>
            <version>2.1</version>
            <type>jar</type>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>

        <dependency>
            <id>commons-digester</id>
            <version>1.5</version>
            <type>jar</type>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>

        <dependency>
            <id>commons-lang</id>
            <version>2.0</version>
            <type>jar</type>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>

        <dependency>
            <id>commons-logging</id>
            <version>1.0.3</version>
            <type>jar</type>
            <properties>
                <war.bundle>true</war.bundle>
            </properties>
        </dependency>

  </dependencies>

webappディレクトリの作成

WARゴール用のwebappディレクトリを作成します。src/webappに作成します(WARゴールのデフォルト。プロパティーで変更可)。

eclipse用のファイルを作成

Maven Eclipseプラグインで、Eclipseの.project、.classpathファイルを生成します。.classpathファイルには、dependencyのJARのエントリも追加されます。

C:\project\etc\maven4\sweb>maven eclipse
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0

Tag library requested that is not present: 'cactus' in plugin: 'maven-eclipse-pl
ugin-1.7'
build:start:

eclipse:generate-project:
    [echo] Creating C:\project\etc\maven4\sweb/.project ...

eclipse:generate-classpath:
    [echo] Creating C:\project\etc\maven4\sweb/.classpath ...
Plugin 'cactus-maven' in project 'Example Application' is not available
    [echo] Setting default output directory to target\classes

eclipse:
    [echo] Now refresh your project in Eclipse (right click on the project and s
elect "Refresh")
BUILD SUCCESSFUL
Total time: 3 seconds
Finished at: Tue Jul 20 23:13:57 JST 2004

Eclipseにインポート

Eclipseを起動し、作成したプロジェクトをインポートします。

また、行っていなければMAVEN_REPO変数を追加します。MAVEN_REPOはJava Build PathのLibrariesから追加できます。MAVEN用にHOMEなどのOSの環境変数を指定していなければデフォルトでユーザーディレクトリの.maven/repositoryがリポジトリです。

クラスパス通ってますね

Strutsアプリケーションの作成

適当に作成します。

ここで作ったのはこれです。→sweb.zip

WARの作成

project.propertiesでWARの出力先を指定します。

#war
maven.war.build.dir=C:/project/etc/maven4/jakarta-tomcat-5.0.27/webapps

でもってWARゴールを実行します。

C:\project\etc\maven4\sweb>maven war
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0

build:start:

war:init:

...(略)

war:war:
    [echo] Building WAR sweb
    [jar] Building jar: C:\project\etc\maven4\jakarta-tomcat-5.0.27\webapps\sweb
.war
BUILD SUCCESSFUL
Total time: 5 seconds
Finished at: Tue Jul 20 23:33:37 JST 2004

これでTomcatのwebappsディレクトリにWARと展開されたフォルダが作成されます。これでデプロイしたことになります(Tomcatの場合は置くだけでいいので特にデプロイは不要)。

Tomcatの起動

最初にランチャーの設定をします。ここではSysdeo Tomcatランチャーを使ってますんで、ソースパスにインポートしたプロジェクトを追加しておきます。

で、ランチャーからTomcatを起動します。

ブラウザからアクセスすると普通に動いているのが確認できます。

ランチャーから実行しているので、ソースデバッグも可能です。

JDK1.4以降のホットコードリプレースも効くので、WARを再実行することなく、Eclipse上でのJavaファイルの編集が反映されます。

だけど。。。

Javaファイルはホットコードリプレースで修正&実行が即時に行えます。JSPや他のリソースファイルを変更したときは再びWARゴールを実行します。そう、そうなのです。JSPを変更したときに再びWARしないといけないのです。EJBやJ2EE EARを作っているのであれば、まあやむなしと思えますが、ただのWebアプリなのにJSPちょこっと直すだけでデプロイ。。。こんなサンプル程度であれば一瞬ですが、ファイルが増えてくるとちょっと重い予感がします。せっかく、Tomcatとか軽いサーバで素早い開発をしているのに、WARするのはイヤです(←間違ってる?)。というわけで、次は、WARせずにEclipse上で開発する方法を行ってみたいと思います。

target/(projectname)ディレクトリにWEBアプリの構成を構築することにしたいと思います。だがしかし、以下のようにソースパス2の出力が1を含んでいるので、webappをソースパスに加える方法だとそのままだとうまくいきません。。。ちょっと工夫が必要なようです(調査中)。

src/
  java/   ソースパス1 出力→target/sweb/WEB-INF/classes
  webapp/ ソースパス2 出力→target/sweb
target/
  sweb/
    WEB-INF/
      classes/
      lib/
      ...

まだMaven使い始めで、おかしいことしているかもしれません。そんなことしなくてもコレでできるよとかいうのあったら是非教えてください。


もどる | TOP