2

編集:私は自分の意図を明確にする必要があると思います...

コードの書き込み >> ビルド WAR >> デプロイ >> 更新 >> 繰り返しの開発反復サイクルを簡素化しようとしています。IDE から比較的独立したいと考えています (つまり、Eclipse や IntelliJ プラグインに作業を任せたくありません)。コード/静的ファイルを編集し、必要に応じて WAR ソース ディレクトリにビルドし、一元化された Jetty インストールへのコマンド ライン呼び出しとしてセットアップを実行/デバッグできるようにしたいと考えています。

後で、一般的に同じセットアップを使用して実際の展開を実行できるようにしたいと思いますが、パッケージ化された WAR を使用します。IDE または Jetty に固有のアプリ コードを使用したくありません。

おそらく、この質問をするより良い方法は、開発/デバッグ アプリ サーバーとして Jetty を使用する最もクリーンな方法は何ですか?


最小限の Jetty 7 をインストールしたいとします。XML 構成をできる限り最小限に抑えたいと考えています。生のサーブレット API だけが必要で、JSP やフィルタリングなどは必要ありません。カスタム サーブレットをいくつか用意し、静的ファイルが存在する場合はそれらを提供できるようにしたいだけです。これが唯一の WAR となり、特定のポートのルートとして配置されます。

理想的には、展開を容易にするために、Jetty ディレクトリを標準のダウンロードだけにし、WAR / XML 構成をこれらの標準の Jetty ファイルとは別にしたいと考えています。Jetty の呼び出しでは、この最小限の XML を渡して実行したいと思います。

ドキュメントはいたるところにあり、その多くは Jetty 6 に関するものか、他のさまざまなパッケージ (Spring など) に固有のものであることがわかりました。この最小限の構成があれば、その上に追加の抽象化を追加すると、はるかにクリーンになると思います。また、組み込みの Jetty シナリオをよりクリーンに処理できるようになります。

この SO の質問は、この XML が役立つシナリオの例です。コマンド ラインのみを使用して Jetty Run War

この 1 つの WAR ロケーションとそれを提供するホスト/ポートを指定するために必要な最小限の XML は何でしょうか?

スニペットやリンクをお寄せいただきありがとうございます。

4

5 に答える 5

4

Jetty は Eclipse に移行しました。これには非常に微妙な情報があります。これは、別のレベルのニュアンスであるパッケージ名の変更にもつながりました. 彼らは、Jetty6 設定を Jetty 7 設定に変換するユーティリティを公開しましたが、これもあまり人気がありません。私は Eclipse Jetty フォーラムに失望しています。ここでは、Jetty 7 以降に関するドキュメントを探す必要がありますhttp://wiki.eclipse.org/Jetty/Starting

これはhttp://wiki.eclipse.org/Jetty/Reference/jetty.xmljetty.xmlから取られた最小限のものだと思います

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">\ 
<Configure id="Server" class="org.eclipse.jetty.server.Server">
</Configure>

しかし、私はむしろのコピーから始めて、$JETTY_HOME/etc/jetty.xmlそこから変更したいと思います。

ディレクトリに問題がなければ$JETTY_HOME/webapps、この部分を変更してポートを設定できます

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    ...
    <Call name="addConnector">
      <Arg>
          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="7777"/></Set>
            <Set name="maxIdleTime">300000</Set>
            <Set name="Acceptors">2</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
        <Set name="lowResourcesConnections">20000</Set>
        <Set name="lowResourcesMaxIdleTime">5000</Set>
          </New>
      </Arg>
    </Call>
    ....
</Configure>

それ以外の場合は、ここで説明した方法を変更context.xmlします (Jetty 7 の場合) portA から webbapp A を提供し、portB から webapp B を提供する方法

次のページも参照してください。

.... 編集 #1: コネクタごとの webapp の URL が間違っていて申し訳ありません。ポート A から webbapp A を提供し、ポート B から webapp B を提供する方法へのリンクを更新して、Jetty 7 向けのドキュメントを参照するようにしました。


「さまざまな環境で Jetty をどのように扱っていますか?」に関する最新情報

開発

Maven を使用しているため、組み込みの Jetty が機能します。実行するだけmvn clean install run:jettyで、ポートはMavenの構成ファイル、つまりpom.xml. これはIDE 依存ではなく、ANT を使用して Jetty を簡単に埋め込むことができますが、試したことはありません。

テスト

スタンドアロンの Jetty を実行しています。ポートを構成し、パラメーターを調整し、デフォルトのアプリ (root.war など) を削除し、アプリ固有のポートと展開ディレクトリを含む context.xml を作成しました。(残念ながら、Eclipse Jetty のメーリング リストでこの質問をしましたが、誰も答えてくれませんでした)。これは 1 回の設定です。

テスト ビルド/デプロイの場合、テスト環境仕様に従って WAR をビルドし、それをテスト環境にアップロードするビルド スクリプトがあります。その後、(1) Jetty を停止し、(2) war ファイルを myApp の webapp ディレクトリにコピーし、(3) Jetty を再起動するシェル スクリプトを呼び出します。

ただし、これを行うより簡単な方法は、Maven の Cargo プラグインを使用することです。運が悪かったのは、Cargo と互換性のない Jetty 7.1.6 を使用していたことです。後で彼らはそれを修正しましたが、私は自分の仕事をカスタムスクリプトでやり遂げました.

製品

Prod はほとんど test と同じ手順を持っています。チューニングは、より高いセキュリティと負荷分散のために行われます。しかし、デプロイの POV からは、テスト ケースから製品まで何の違いもありません。

XML ファイルとは何か、そこに何個必要かについては気にしていないことに注意してください。私が懸念しているものを使用しました -jetty.xmlcontext.xml. さらに、 JVM パラメーター、カスタム XML の受け渡し、および開始と停止のために、jetty.conf使用するのがはるかにクリーンであることがわかりました。jetty.sh

お役に立てれば。


ホット展開の場合:

ここで、Maven を使用し、組み込みの Jetty を使用するとします。「銃声探知機」のように、コードがいつ変更されたかを知るだけです。dev envt では、Jetty を実行し、変更を加え、ページを更新し、変更を確認します (ホット デプロイ) 。詳細はこちらhttp://docs.codehaus.org/display/JETTY/Maven+Jetty+Pluginを探してくださいscanIntervalSeconds

于 2011-02-11T20:25:39.223 に答える
3

これはあなたの質問に完全に答えるものではありませんが、参考までに、組み込みの Jetty 7 を使用して 1 つのルート サーブレットでサーバーを起動する最小限のコードを次に示します。

    HandlerCollection handlers = new HandlerCollection();
    ServletContextHandler root = new ServletContextHandler(handlers, "/", ServletContextHandler.NO_SESSIONS|ServletContextHandler.NO_SECURITY);
    root.addServlet(new ServletHolder(new MyServlet()), "/*");

    Server server = new Server(8080);
    server.setHandler(handlers);
    server.start();

もちろんhttp://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jettyを参照してください。

于 2011-02-11T19:50:32.863 に答える
0

今やっていることで更新しようと思いました。私は小さなコマンドラインアプリ/Mavenアーキタイプを作成しました。これは、そもそもこれがすべてあるべきだと思っていたように機能します。ブートストラップアプリを使用すると、WARとポートへのパスを渡すだけで、選択したサーブレットコンテナ(Jetty、Tomcat、GlassFish)を起動できます。

Mavenを使用すると、このシンプルなアプリの独自のインスタンスを作成してパッケージ化できます。

mvn archetype:generate \
    -DarchetypeGroupId=org.duelengine \
    -DarchetypeArtifactId=war-bootstrap-archetype \
    -DarchetypeVersion=0.2.1

次に、次のように起動します。

java -jar bootstrap.jar -war myapp.war -p 8080 --jetty

ユーティリティとアーキタイプのソースは次のとおりです:https ://bitbucket.org/mckamey/war-bootstrap

于 2011-07-27T18:39:00.877 に答える
0

Maven(IDEに依存しない)を使用してビルドしている場合は、MavenJettyプラグインを使用してデバッグする必要があります。基本的に、コマンドラインで「mvn jetty:run」としてアプリを実行すると、再デプロイを行うことなくすべてが機能します。最も優れたIDEには、Mavenサポートが組み込まれており、アプリをMavenとして実行/デバッグできます。これは、アプリを起動するjettyプラグインを起動するMavenが実行され、デバッグできることを意味します。すべてがIDEソースフォルダーとbinフォルダーを使い果たしているため、jettyサーバーをインストールする必要はありません。

これは、 https://github.com/simbo1905/ZkToDo2/blob/master/commandline.build.and.run.txtで実行されるデモプロジェクトであり、Eclipsehttps ://github.comで実行する方法です。 /simbo1905/ZkToDo2/blob/master/eclipse.indigo.build.and.debug.txtですが、Mavenを理解するIDEであればすべて機能するはずです。MavenJettyプラグインをセットアップするpom.xmlを見てください。

于 2012-06-17T07:17:15.200 に答える