84

私は受け入れテスト用のプロジェクトを作成していますが、さまざまな理由から、これは WAR としてパッケージ化された別のプロジェクトに依存しています。maven-dependency-plugin を使用して WAR をアンパックできましたが、プロジェクトにアンパックされたものを含めてクラスパスに含めることができないWEB-INF/lib/*.jarためWEB-INF/classes/*、ビルドが失敗します。これらのファイルをクラスパスに含める方法はありますか、または WAR に依存するより良い方法はありますか?

どうもありがとう。

4

5 に答える 5

119

maven-war-plugin 2.1-alpha-2 以降、別のオプションがあります。WAR プロジェクトで:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        <attachClasses>true</attachClasses>
    </configuration>
</plugin>

これにより、受け入れテスト プロジェクトで使用できるクラス アーティファクトが作成されます。

<dependency>
    <groupId>your-group-id</groupId>
    <artifactId>your-artifact-id</artifactId>
    <version>your-version</version>
    <classifier>classes</classifier>
</dependency>
于 2012-04-10T14:21:40.963 に答える
25

実際、設計上、Maven はプロジェクトの依存関係として宣言された war の推移的な依存関係を解決しません。実際にはMNG-1991という問題がありますが、Maven 2.x では解決されず、オーバーレイでこの問題を回避できるかどうもわかりません。提案された解決策についての私の理解は、たとえば pom タイプのプロジェクトで依存関係を複製することです。


(編集:さらに掘り下げた後、このスレッドで興味深いものを見つけました。以下に引用します:

私は先月、Maven war プラグインの war オーバーレイ機能を多用する AppFuse プロジェクトの開発を支援してきました。それは本当に気の利いた機能です!

戦争オーバーレイで最大のパワーを得るために、プロジェクトが完全な依存関係として戦争アーティファクトを使用できるようにする Warpath プラグインを開発しました。簡単に言えば:

1) war 依存アーティファクトの /WEB-INF/classes ディレクトリの内容は、通常のコンパイルなどのタスクのためにプロジェクトのクラスパスに含めることができます。
2) war 依存関係アーティファクトからの推移的な依存関係は、他のプラグイン (たとえば compile や ear) で使用できるようになります。したがって、スキニー war を作成するときにすべての依存関係を含める必要はもうありません!

このプラグインは、ここ数か月間 AppFuse プロジェクトで積極的に使用されており、使用可能で安定している段階にあると感じています。war プラグイン チームは、war プラグイン内に warpath 機能を含めることに関心がありますか? それをホストするのに最も自然な場所のようです。

そのため、私はそれを使用した経験はありませんが、maven warpath プラグインは実際には見栄えがよくシンプルで、中央リポジトリで利用できます。これを使用するには、次のプラグイン構成要素をpom.xmlファイルに含めます。

[...]
<build>
  <plugins>
    <plugin>
      <groupId>org.appfuse</groupId>
      <artifactId>maven-warpath-plugin</artifactId>
      <version>1.0-SNAPSHOT</version>
      <extensions>true</extensions>
      <executions>
        <execution>
          <goals>
            <goal>add-classes</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
[...]

そして、 warpathタイプの依存関係としてクラスパスに含めたい war 依存関係を追加します。

[...]
<dependencies>
  <dependency>
    <groupId>org.appfuse</groupId>
    <artifactId>appfuse-web</artifactId>
    <version>2.0</version>
    <type>war</type>
  </dependency>
  <dependency>
    <groupId>org.appfuse</groupId>
    <artifactId>appfuse-web</artifactId>
    <version>2.0</version>
    <type>warpath</type>
  </dependency>
</dependencies>
[...]

war と warpath の両方の依存関係タイプが必要です。war タイプは Maven war プラグインが war オーバーレイを行うために使用し、warpath タイプは Warpath プラグインがプロジェクトのクラスパスに含めるアーティファクトの正しいリストを決定するために使用します。

やってみます。)

于 2009-11-20T12:24:15.857 に答える
15

オーバーレイを使用します。まず、テスト プロジェクトには packages も必要warです。

テストする war プロジェクトの依存関係を宣言します。

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>your-project-arftifactId</artifactId>
    <version>${project.version}</version>  
    <type>war</type>
    <scope>test</scope>
</dependency>

次に、maven-war-plugin オーバーレイを構成します。

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
            <webResources>
                <resource>
                    <directory>${basedir}/src/main/webresources</directory>
                    <filtering>true</filtering>
                </resource>
            </webResources>
            <overlays>
                <overlay/>
                <overlay>
                    <groupId>your.group</groupId>
                    <artifactId>your-project-artifactId</artifactId>
                </overlay>
            </overlays>
        </configuration>
    </plugin>

上記のテスト プロジェクトの例では、webresources 構成ファイル (conxtext など) を上書きします。

編集:このソリューションは Maven 3 でテストされていません。

于 2009-11-20T11:20:38.370 に答える
4

良い点、ジャスティン。それは私が実際に私の問題を解決するようになりました。つまり、戦争をアセンブリに含め、そのすべての推移的な依存関係を含めることです。アセンブリプラグインがそのgroupId/artefactIdによって参照されるjarを検出しないため、提案したようにwar-dependencyを'jar'として複製できませんでしたが、

  • タイプpomとしての戦争依存性の複製

動作します!戦争とその推移的な依存関係は、アセンブリに含まれていません。(現在も表示されている)pomファイルを除外するには、次のような除外要素を追加する必要がありました。

  <excludes>
    <exclude>*:pom</exclude>
  </excludes>

私のassembly.xmlファイルに。

これは、このスレッドの元の質問の回避策にもなる可能性があると思います。

于 2011-04-22T16:18:44.747 に答える
-1

war プロジェクトへの依存関係を jar 依存関係としてリストすると、必要な jars/resources を取得しているように見えます。Maven 2.2 + m2eclipse を使用しています。

于 2010-09-08T14:35:41.113 に答える