11

注:この質問の最初のバージョンでは何の回答も得られなかったので、より一般的なものに変更しました...

環境

私のプロジェクトは、いくつかの Maven モジュールといくつかの Web アプリケーションに分かれています。構造は次のとおりです。

my-project
  + pom.xml
  +-- commons
  +-- persistence
  +-- ...
  +-- web-app-1
  +-- web-app-2
  +-- ...

すべての Web アプリケーションは、JS、CSS、画像ファイルなどの共通のリソースを共有します。

これらのリソースを各 で複製する代わりに、WAR プロジェクトであるweb-app-Xという別のプロジェクトを作成することにしました。web-resourcesその場合、構造は次のようになります。

my-project
  + pom.xml
  +-- commons
  +-- persistence
  +-- ...
  +-- web-app-1
  +-- web-app-2
  +-- ...
  +-- web-resources
       +-- pom.xml
       +-- src/main/webapp
            +-- web.xml (which is almost empty, just need to be present for Maven)
            +-- web_resources
                 +-- css
                 +-- images
                 +-- javascript

メイヴン

Maven 2 (または、プロジェクトを maven 3.0.2 に移行したばかりの Maven 3) では、すべてが依存関係としてweb-app-X宣言されているため、この構成は簡単に管理できます。web-resources

<groupId>foo.bar</groupId>
<artifactId>web-app-1</artifactId>
...
<dependencies>
    <dependency>
        <groupId>foo.bar</groupId>
        <artifactId>web-resources</artifactId>
        <version>${preclosing-version}</version>
        <type>war</type>
    </dependency>
    ...

したがって、WAR プロジェクトをビルドするときは、最初にweb-resources.war(直前にビルドされた) を取得し、解凍して、その上にWeb アプリケーションをビルドします。web-app-Xこのようにして、私の WAR ファイルにweb-resources/は、共有リソースを含む と呼ばれるディレクトリも含まれます。

これがウォーオーバーレイの原則です。

したがって、Maven の観点からは、すべて問題ありません。


エクリプス

ここで、主な問題が発生します。適切な Eclipse 構成を使用することです。

質問: 現在の構成を使用して Eclipse で正しく管理するにはどうすればよいですか? 特に、web-app-XEclipseを使用してTomcatにデプロイすると...

この構成は何十人もの開発者が使用する必要があるため、より自動化可能な (?) 構成を取得し、手動の手順を避けたいことに注意してください...

私にとっては、リンクされたEclipseのリソースを使用するのが最善の解決策のようです。したがって、web-app-Xpom.xmlで次の構成を設定します。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <configuration>
                <wtpversion>1.5</wtpversion>
                <linkedResources>
                    <linkedResource>
                        <name>web_resources</name>
                        <type>2</type>
                        <location>${project.basedir}\..\web-resources\src\main\webapp\web_resources</location>
                    </linkedResource>
                </linkedResources>
            </configuration>
        </plugin>
        ...

構成を実行すると、次の情報がファイルmvn eclipse:eclipseに正常に追加されます。.project

<projectDescription>
  ...
  <linkedResources>
    <link>
      <name>web_resources</name>
      <type>2</type>
      <location>C:\dev\project\web-resources\src\main\webapp\web_resources</location>
    </link>
  </linkedResources>
<projectDescription>

ここで、プロジェクトを Eclipse にインポートします。問題: にProject properties > Java Build Path > Source、リンク ソースが表示されません。4 つの Maven デフォルト ディレクトリ ( src/main/javasrc/main/resourcessrc/test/javaおよびsrc/test/resources) しか表示されません。奇妙なのは、リンクされたリソースを手動で追加しようとすると、拒否され、既に存在すると言うことです...

そのため、Eclipse で Tomcat に Web アプリケーションをデプロイすると、web_resources ディレクトリがデプロイされないため、CSS / JS / イメージがデプロイされません

いくつかのテストの後、2 つの変更を行う必要があるようです。

  1. <classpathentry kind="src" path="web_resources" output="src/main/webapp/web_resources"/>ファイルに次の行を追加し.classpathます。
  2. ファイル内の を削除し<project>preclosing-web-resources</project>ます.project

この構成を使用すると、Eclipse は web_resources プロジェクトの内容を my にコピー (および同期を維持) しますweb-app-X/src/main/webapp/web_resourcesが、これは問題ではありません (このディレクトリは SCM によって無視されます)。

私が見つけた唯一の自動化された解決策は、前の 2 つの変更を行う単純な Maven プラグインを作成し、次のコマンドを実行する (または .bat ファイルを使用する) ことでした。

mvn eclipse:clean eclipse:eclipse myEclipsePlugin:eclipse

質問

  • そのような構成を管理するためのより良い方法はありますか?

技術的な案内

Java 6、Maven 3.0.2、maven eclipse プラグイン 2.8、Eclipse 3.3.2 (ただし、新しいバージョンの Eclipse でテストできます)、m2eclipse プラグインなし。

4

2 に答える 2

1

このブログ記事をご覧になることをお勧めします。Maven を使用してリソースを共有する方法について説明します。

http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/

于 2011-08-15T16:01:51.623 に答える