開発のための最もきれいな桟橋の構成は?
-
12-11-2019 - |
質問
編集:私は私の意図を明確にするべきだと思います...
書き込みコードの開発繰り返しサイクルを簡素化しようとしています>> wart >> deploy >> refresh >>繰り返し。 IDE(すなわち、EclipseやIntellij Plug-Insを作業を行いたくない)から比較的独立したいのですが。必要に応じてコード/静的なファイルを編集して自分のWARソースディレクトリにビルドすることができるようにし、集中型のJettyインストールへのコマンドライン呼び出しとして実行/デバッグ設定を行うだけです。
後で、一般的に同じセットアップを使用して実際の展開を実行できますが、パッケージ化されたWARがあります。私のIDEまたは桟橋に固有のアプリコードを持っていたくない。
それで、この質問をするより良い方法は見つかったのはあなたのdev / debug app serverとしてjettyを使うのが最もきれいな方法ですか?
最小限のJetty 7のインストールをしたいとします。できるだけ最小限のXML構成として必要な場合は、Raw Servlet API、JSP、フィルタリングなしなどが必要です。カスタムサーブレットを持つことができ、静的ファイルが存在する場合は静的ファイルを提供することができます。これは唯一の戦争になり、特定のポートのrootとして座ります。
理想的には、展開を容易にするために、Jettyディレクトリを標準的なダウンロードであるだけで、私のWAR / XML設定はこれらの標準のjettyファイルとは別のものです。私の桟橋の呼び出しでは、この最小限のXMLを渡したいと思います。
文書が場所全体にわたって、それほど多くのさまざまなパッケージ(春など)のためのものです。私がこの最小限の設定をしている場合は、上に追加の抽象化を追加すると、たくさんのクリーナーになります。また、Embedded-Jettyシナリオをよりきれいに対処することもできます。
このような問題は、このXMLが役に立つようなシナリオの例です。コマンドライン のみを使用している戦争
この1つの戦争所とホスト/ポートを指定するのに必要な最小限のXMLとは何ですか?
潜水艦やリンクをおかげでおかげです。
解決
桟橋はEclipseに移行しました。これには非常に微妙な情報があります。これはまた、パッケージ名の変更をもたらし、これは別のレベルのニュアンスです。 Jetty6設定をJetty 7の設定に変換するためのutilを公開しましたが、これもまた人気がありません。私はEclipse Jettyフォーラムから破っています。ここでは、Jetty 7 Onwards http://wiki.eclipse.org/jetty/starting
これは、 http://wiki.eclipse.orgから撮影された最小限のjetty.xml
です。 /jetty/reference/jetty.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) WebBApp aにサービスする方法PortbからのPortaとWebApp Bから
これらのページも参照してください。
- > http://wiki.eclipse.org/jetty/reference/jetty.xml_syntax
- http://communitymapbuilder.org/display/jetty/jndi
.... 編集#1:コネクタごとにWebAppの間違ったURLをごめんなさい。 Portb からPortb のWebBApp Aのリンクをに更新しました。
アップデートさまざまな環境での桟橋の扱い方法? '
dev
Mavenを使いますので、埋め込まれた桟橋は私たちに働きます。
mvn clean install run:jetty
を実行し、ポートはMavenの設定ファイル、すなわちpom.xml
で設定されます。これはではありません IDEに依存して桟橋はAntを使って簡単に埋め込むことができますが、試したことはありません。テスト
スタンドアロンの桟橋を走らせる。私はポートと調整されたパラメータを設定し、デフォルトのアプリを削除しました(例えばroot.warなど)と、アプリ固有のポートと展開ディレクトリを使用してcontext.xmlを作成しました。 (残念ながら、私はEclipse Jettyのメーリングリストにこの質問をしました。これは誰も答えませんでした)。これは1回設定です。
テストビルド/展開の場合は、テストenv specsに従って戦争を構築してからテスト環境にアップロードするビルドスクリプトがあります。 (1)jettyを停止するシェルスクリプトを起動した後、(2)WARPのWebアプリケーションのDireAtoryをコピーし、(3)Jettyを再起動します。
しかし、これをやる方法はMavenの貨物プラグインを使用することです。悪い運は私が貨物とは互換性がないJetty 7.1.6を使っていたということでした。後で彼らはそれを修正しましたが、私はカスタムスクリプトによって私の仕事を成し遂げました。
prod
PRODはテストとほぼ同じ手順を持っています。チューニングは、より高いセキュリティと負荷分散のために行われます。しかし、展開POVから、テストケースとProdまで何も異なるものはありません。
私はどのXMLファイルのものであり、何人のXMLファイルを悩ませていないことに注意してください。私は私の懸念であるものを使用しただけです -
jetty.xml
とcontext.xml
。さらに、JVM Params、カスタムXML、および開始と停止には、jetty.conf
とjetty.sh
を使用するのが依然としてクリーナーです。これが役立つことを願っています。
ホット展開:
今、Mavenを使用して埋め込み桟橋を使用している場合。コードが変更されたときに知っています - 「Gunshot Sniffer」のように。 Dev Envtでは、Jettyを実行し、変更、ページを更新し、変更を加え、変更を確認します - 展開。もっと彼を見つける
scanIntervalSeconds
を探します 他のヒント
これはあなたの質問には完全には答えませんが、それが役立つ場合は、埋め込みJetty 7を使用していくつかのかなり最小限のコードがあります。
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();
.
もちろん、もちろんhref="http://wiki.eclipse.org/jetty/tutorial/embedding_jetty" real="nofollow"> http://wiki.eclipse.org/jetty/tutorial/embedding_jetty。
あなたがMaven(IDEに依存しない)で構築している場合は、Maven Jetty Pluginでデバッグする必要があります。基本的にあなたは "MVN Jetty:Run"としてアプリを実行します。コマンドラインでは、再展開をしなくても機能します。 MavenがサポートされているMAVENがサポートされていて、Mavenとしてアプリを実行/デバッグさせることができます。 mavenが実行されることを実行すると、アプリを起動するJettyプラグインが起動し、デバッグできます。すべてがIDEソースとBINフォルダから実行されているので、Jetty Serverのインストールが必要ありません。
これは、そのように実行するデモプロジェクトです。 HTTPS ://github.com/simbo1905/zktodo2/blob/master/commandline.build.and.ant.run.txt とここでは、Eclipseの下で実行する方法は https://github.com/simbo1905/zktodo2/blob/master/eclipse.indigo.build.and。 debug.txt Mavenを理解しているIDEは働くべきです。 Maven Jetty Pluginを設定するPOM.XMLを見てください。
gradleを使い、ビルドの変更の数秒ごとにビルド出力フォルダをスキャンします。
build.gradleファイルの場合:
apply plugin: 'jetty'
...
jettyRun.doFirst {
// set system properties, etc here for bootstrapping
}
jettyRun {
httpPort = 8989
reload = 'automatic'
scanIntervalSeconds = 3
daemon = false
}
.
それはそれです。IDEを自動ビルドしておくことを選択して、そのディレクトリを指すこともできます。しかし、あなたはしないことを選ぶこともできます。この解決策は、IDEに全く接続されていません。
私は私が今やることで更新したいと思いました。私はこれがすべてがそもそも持っているべきであると思った方法のように機能する小さなコマンドラインアプリ/ Maven Archetypeを書いた。ブートストラップアプリは、あなたがそれを戦争への道とあなたのポートへの道を渡すことによって、あなたの選択のサーブレットコンテナ(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
.
これは、ユーティリティとarchetypeのソースです。 https://bitbucket.org/mckamey/war-ブートストラップ