4

ここに問題があります。クライアント用の Web アプリケーションを構築します。一部のクライアント データ構造を変更する「管理」Web アプリケーションもあります。データの性質上、両方の Web アプリケーションを同じ JVM で実行する必要があります。

これは本番環境では問題ありません。同じアプリ サーバーに 2 つの Web アプリを配置するだけです。

ただし、最近、webapp のレイアウトを Mavenish の方法に切り替えました。Maven では、プロジェクトごとに 1 つの webapp が必要です。Eclipse では、これは問題です。異なる Web アプリケーションを個別に実行すると、それらは別々の JVM になるためです。

jetty-maven-plugin を使用して webapp のテストを実行しようとしていますが、この問題が解決する場合は別のものに切り替えることができます。

4

5 に答える 5

6

はい、できます :) 1 つの WAR モジュールをプライマリとして識別し、他のすべての WAR をプライマリのターゲット ディレクトリにコピーし、jetty.xml を作成し、Maven Jetty プラグインに jetty.xml を使用するように指示します。Maven 依存関係プラグインを使用して他の WAR をコピーする方法は次のとおりです。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
    <execution>
        <id>copy</id>
        <phase>package</phase>
        <goals>
            <goal>copy</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>com.foo</groupId>
                    <artifactId>bar</artifactId>
                    <version>${project.version}</version>
                    <type>war</type>
                    <overWrite>true</overWrite>
                    <outputDirectory>target/</outputDirectory>
                </artifactItem>
            </artifactItems>
        </configuration>
    </execution>
</executions>

com.foo:bar 依存関係も POM で定義する必要があります。jetty.xml の内容は次のとおりです。

<?xml version="1.0"?>

<!-- =========================================================== -->
<!-- Set handler Collection Structure                            -->
<!-- =========================================================== -->
<Set name="handler">
    <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
        <Set name="handlers">
            <Array type="org.eclipse.jetty.server.Handler">
                <Item>
                    <New class="org.eclipse.jetty.server.handler.ContextHandlerCollection"
                         id="Contexts">
                        <Set name="handlers">
                            <Array type="org.eclipse.jetty.server.Handler">
                                <Item>
                                    <New id="FooWebHandler"
                                         class="org.eclipse.jetty.webapp.WebAppContext"/>
                                </Item>
                            </Array>
                        </Set>
                    </New>
                </Item>
            </Array>
        </Set>
    </New>
</Set>

<Ref id="FooWebHandler">
    <Set name="contextPath">/foo</Set>
    <Set name="war">
        target/bar-${project.version}.war
    </Set>
</Ref>

Maven Jetty プラグインに新しい jetty.xml を使用するように指示する方法は次のとおりです。

<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
    <jettyConfig>${basedir}/jetty.xml</jettyConfig>
</configuration>

ここで、Eclipse から jetty:run-war ゴールを開始すると、すべての WAR が 1 つの Maven Jetty プラグイン インスタンスにデプロイされていることがわかります。これをコマンドラインから実行すると、YMMV with Eclipse で動作します。

于 2011-05-25T15:53:50.700 に答える
5

これは、jetty.xml を変更せずに、jetty-maven-plugin を介して直接行うことができます。

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <configuration>
        <scanIntervalSeconds>5</scanIntervalSeconds>
        <webApp>
            <contextPath>/</contextPath>
        </webApp>
       <contextHandlers>
          <contextHandler implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
            <war>${project.basedir}/../secondProject.war</war>
            <contextPath>/cc</contextPath>
          </contextHandler>
        </contextHandlers>  
    </configuration>
    <executions>
        ...
    </executions>
</plugin>

これを正常に使用するために jetty.xml ファイルを変更する必要はまったくありません。また、war ファイルをコピーする必要もありません。(ただし、このビルドの一部として 2 番目の戦争をビルドすることもできます。maven-invoker-plugin を参照してください)

ドキュメントはこちら: http://www.eclipse.org/jetty/documentation/9.2.2.v20140723/jetty-maven-plugin.html#running-more-than-one-webapp

于 2014-11-28T15:33:18.677 に答える
3

ccleveの回答の例を次に示します。

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;
...
public static void main(String[] args) throws Exception {
...
Server server = new Server(port);
HandlerCollection handlers = new HandlerCollection();

WebAppContext frontEndWebappContext = new WebAppContext(
     "src/main/webapp", "/test"
);
handlers.addHandler(frontEndWebappContext);

String serviceWebappBasePath = {absolute_path_to_other_webapp};
WebAppContext serviceWebappContext = new WebAppContext(
     serviceWebappBasePath + "/main/webapp", "/"
);
handlers.addHandler(serviceWebappContext);
XmlConfiguration conf = new XmlConfiguration(new File(
   serviceWebappBasePath +  "test/webapp/WEB-INF/jetty-web.xml")
.toURI().toURL().openStream());
conf.configure(serviceWebappContext);

server.setHandler(handlers);
server.start();

...

この場合、「/test」にマウントされたフロントエンド webapp と「/」にマウントされたサービス webapp があります。また、サービス アプリの jetty-web.xml も含めます。

あなたの場合、作成するランチャーは「src/test」フォルダーに配置する必要があります。これは、want をテスト目的でのみ使用するため、戦争に含めるべきではないためです。

また、フロント エンド webapp の pom ファイルのスコープ テストで、サービス webapp への依存関係を追加する必要がある場合があります。

<dependency>
 <groupId>{service_group}</groupId>
 <artifactId>{service_artifact_id}</artifactId>
 <version>{service_version}</version>
 <scope>test</scope>
</dependency>

または

<dependency>
  <groupId>{service_group}</groupId>
  <artifactId>{service_artifact_id}</artifactId>     
  <type>test-jar</type>
  <version>{service_version}</version>
  <scope>test</scope>
</dependency>
于 2013-05-11T19:38:32.593 に答える
0

私自身の質問に答える:

これは不可能のようです。私たちが思いついた回避策は、埋め込まれた小さな桟橋コードを書き、アプリ内から起動することです。Jetty を使用すると、複数の Web アプリケーションをプログラムで追加できます。また、複数のリソース ベース (ディレクトリ) を webapp ごとに作成して、オーバーレイを有効にすることもできます。これまでのところ、うまく機能しています。

于 2011-04-12T21:28:31.973 に答える
0

Maven/Jetty の経験はあまりありません。しかし、私は Eclipse で Tomcat を使用した経験があります。ですから、私たちは少なくとも Eclipse でサーブレットを使って何かをしています。

いずれにせよ、あなたが Eclipse でプロジェクトを作成したことがあるかどうか、または Eclipse でプロジェクト テンプレートを使用していないかどうかはわかりませんが、私は動的 Web プロジェクト テンプレートを使用して自分のプロジェクトを作成しました。これまでに 2 つの Web アプリを作成したことがありません。しかし、これらのプロジェクトを 2 つ作成してから、Eclipse サーバー タブで新しいサーバーを作成し、両方のプロジェクトをそれに追加すると、目標を達成できる可能性があります。

Run As を実行すると、基本的に、Eclipse がプロジェクトのセットアップ用に持っているデフォルトの実行構成を実行しているだけです。ただし、両方のプロジェクトを開発環境の 1 つのサーバーにデプロイし、そのサーバーを選択して [開始] を押すと、1 つの JVM で開始されるはずです。本番環境に似ています。

私が言ったように; 私は Jetty を使用しておらず、Jetty でサーバー セットアップ ガイドを使用したことがないため、これが機能するかどうかはわかりません。ですから、これがお役に立てば幸いですが、そうでない場合でもそれほど驚くことはありません。

于 2011-04-03T01:26:30.647 に答える