36

コマンド ライン ツールを使用して別の JAR ファイルを作成できるように、Maven WAR プロジェクトを 2 つのモジュールに分割しようとしています。結果の構造は次のとおりです。

  • pom.xml(パッケージpomには、2 つのモジュールがあります)
  • project-jar/
    • pom.xml(包装jar)
  • project-war/
    • pom.xml(包装war、依存project-jar)

mvnルートからコマンドを実行すると、すべて正常に動作します。を使い続けたいのですmvn jetty:runが、そのためには WAR サブプロジェクトでコマンドを実行する必要があります。project-jarそうすると、サブプロジェクトが見つからないため、実行されません。mvn jetty:run-warディレクトリ内の完全にアセンブルされた WAR ファイルでも、最初targetにプロジェクトを「ビルド」しようとするため、失敗します。ローカルの Maven リポジトリにインストールすることによってのみ動作させることができましたがproject-jar、これはあまり良くありません。

マルチモジュール Maven 構成で Jetty プラグインを使用する方法はありますか?

4

6 に答える 6

29

war モジュール内にプロファイルを作成します ( project-war)。このプロファイル内で、jetty をライフサイクル フェーズにアタッチし、run明示的にゴールを実行するように構成します。そのプロファイルを有効にして最上位プロジェクトから maven を実行すると、jetty:run が呼び出され、姉妹モジュールの依存関係が解決されます (最上位プロジェクトから maven コマンドを実行するときは通常どおり)。

構成例を Web モジュールの pom.xml に配置すると ( project-war)、testフェーズ中に jetty:run が実行されるように調整されます。(別のフェーズを選択することもできますが、それが の後であることを確認してcompileください。)

トップレベルから実行:mvn test -Pjetty-runまたはmvn test -DskipTests=true -Pjetty-run. これにより、必要に応じて依存関係がコンパイルされ、利用可能になりますが、正しいモジュール内で jetty:run が呼び出されます。

<profiles>
  ...
  <!-- With this profile, jetty will run during the "test" phase -->
  <profile>
    <id>jetty-run</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>jetty-maven-plugin</artifactId>
          <version>7.1.6.v20100715</version>
          <configuration>
            ...
            <webAppSourceDirectory>
              ${project.build.directory}/${project.build.finalName}
            </webAppSourceDirectory>
            ...
          </configuration>
          <executions>
            <execution>
              <id>jetty-run</id>
              <phase>test</phase>
              <goals>
                <goal>run</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
...
</profiles>
于 2011-05-09T18:47:57.270 に答える
11

魔法のような解決策はありません。私が知っている唯一の方法は、少しハックであり、extraClasspath追加のクラス ディレクトリを宣言するために使用できる要素に依存していることです。このように ( JETTY-662から):

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>7.0.1.v20091125</version>
  <configuration>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <webAppConfig>
      <contextPath>/my-context</contextPath>
      <extraClasspath>target/classes;../my-jar-dependency/target/classes</extraClasspath>
    </webAppConfig>
    <scanTargets>
      <scanTarget>../my-jar-dependency/target/classes</scanTarget>
    </scanTargets>
  </configuration>
</plugin>
于 2010-09-03T16:49:10.073 に答える
1

jetty構成でextraClasspathを使用すると機能します...しかし、何らかの理由で、(他のモジュールからの)依存jarが古い場合、いくつかのことが正しく機能しません。

于 2010-10-14T13:20:39.717 に答える
0

プラグイン構成を求めていることは知っていますが、maven コマンドでプロジェクトを定義するだけで済みます。

$ mvn jetty:run --projects project-war
于 2016-03-07T21:27:58.020 に答える