6

背景: Maven プロジェクトで機能テスト モジュールをセットアップしています。テストにはmaven-jetty-pluginを使用します。

ここで説明されているように jetty プラグインをセットアップしました(Failsafe プラグインとうまく連携するため)。機能テストモジュールが実行されるまでに、ローカルの Maven リポジトリ)。

jetty プラグインのrun-war ゴールには、<webApp>デプロイする war への文字列パスを取る要素があります。むしろ、Web モジュールで定義された Maven 座標を使用して展開する戦争を指定したいと思います。これを行う方法はありますか?

考えられる回避策:

  1. 「Maven を使用したより良いビルド」のセクション 4.13 では、 cargo を使用して、maven 座標を使用して指定された戦争を展開する方法について説明していますが、jetty を使用していることを考えると、これは深刻なやり過ぎです。
  2. より合理的な IMO は、dependency:copy を使用して、ビルドしてインストールしたばかりの war アーティファクトを、機能テスト モジュールのターゲット ディレクトリの固定パスにコピーします。これを、jetty プラグインの<webApp>構成要素で提供できます。
4

1 に答える 1

9

jetty プラグインの run-war ゴールには、デプロイする war への文字列パスを取る要素があります。むしろ、Web モジュールで定義された Maven 座標を使用して展開する戦争を指定したいと思います。これを行う方法はありますか?

これは実際には maven jetty プラグインが使用されることになっているわけではありません。プラグインは現在のモジュールの war をデプロイします。やりたいことはデフォルトではサポートされていません。

「Maven を使用したより良いビルド」のセクション 4.13 では、cargo を使用して、maven 座標を使用して指定された戦争を展開する方法について説明しています。

はい、貨物はこれをきれいな方法で行うことができます。

しかし、jetty を使用していることを考えると、これは非常にやり過ぎです。

同意しません。まず、jetty プラグインはすぐに使用できる機能をサポートしていません (したがって、適切なツールではない可能性があります)。第二に、深刻なオーバーキルは非常に誇張されており、実際には誤解です。特に、貨物が埋め込まれた Jetty の設定をほとんど必要としない (ゼロ?) ことを考えると。

より合理的な IMO は、dependency:copy を使用して、ビルドしてインストールしたばかりの war アーティファクトを、機能テスト モジュールのターゲット ディレクトリの固定パスにコピーします。

不快ではありませんが、あなたの質問全体は少し次のように聞こえます。私はハンマーを持っています。釘には問題ありませんでした。ドライバーを手に入れるのは深刻なやり過ぎのように思えますが、ネジに使用できますか? この質問に答えるには(どういうわけかあなたが言っていることです)、dependency:copymaven jettyプラグインを使用してすべてを動作させることができますが、これはハックです(実際には質問をしていないので、あなたが望んでいたと思いますこれについての意見)。もちろん、最終決定はあなたに属します:)

念のため、これを Cargo で実装する方法を次に示します。

<dependencies>
  <dependency>
    <groupId>war group id</groupId>
    <artifactId>war artifact id</artifactId>
    <type>war</type>
    <version>war version</version>
  </dependency>
  ...
</dependencies>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <configuration>
        <!-- Container configuration -->
        <container>
          <containerId>jetty6x</containerId>
          <type>embedded</type>
        </container>
        <!-- Configuration to use with the container or the deployer -->
        <configuration>
          <deployables>
            <deployable>
              <groupId>war group id</groupId>
              <artifactId>war artifact id</artifactId>
              <type>war</type>
              <properties>
                <context>war context</context>
              </properties>
            </deployable>
          </deployables>
        </configuration>
        <!-- Don't wait, execute the tests after the container is started -->
        <wait>false</wait>
      </configuration>
      <executions>
        <execution>
          <id>start-container</id>
          <phase>pre-integration-test</phase>
          <goals>
            <goal>start</goal>
          </goals>
        </execution>
        <execution>
          <id>stop-container</id>
          <phase>post-integration-test</phase>
          <goals>
            <goal>stop</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

そして、これは客観的に「深刻なやり過ぎ」とは言えないと思います。

于 2010-02-13T22:51:38.087 に答える