ホットデプロイ環境としてのTomcatとEclipseの統合


88

私のJSPとサーブレット(可能な場合)への変更がデプロイメントを必要とせずにすぐに反映されるように、EclipseとTomcatを統合してセットアップしたいと思います。

わかりました、これはインターネット全体でたくさんの答えを持っているそれらの質問の1つですが、それらはすべて異なるように見えます。(Sysdeoプラグインを使用する、JBOssプラグインを使用する、古いEclipseを使用する、代わりにMyEclipseを使用するなど)そして、参照する決定的なリソースを1つ見つけることができませんでした。だから私の利益のために、これを設定するための最も簡単で最も推奨される手順は何ですか?

これは、EclipseとTomcatが独立して実行されていることを前提としています。私は実際に、次の手順を使用して、非ホットデプロイ方式でそれらを統合することに成功しました:http : //www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

Eclipseバージョンバージョン:3.4.2(Ganymede)Tomcat v6.0.20


17
4年後、私はそれがまだ問題であるという事実に困惑しています。さあ、それはかなり基本的です。
Konrad Garus 2013年

7年後(ほぼ)、私は解決策を見つけたと思います: stackoverflow.com/a/37064672/1034436
martian111

回答:


75

2つのオプションがあります。

まず、Eclipseでは、構成を少し変更するだけでこれを実行できます(この詳細な投稿も参照してください)

  • Tomcatをサーバーリストに追加する
  • プロジェクトを「動的Webプロジェクト」にします(作成ウィザードまたは設定のファセットセクションを使用)
  • プロジェクトをTomcatに追加し、その「デプロイメントアセンブリ」を構成する
  • リストからtomcatをダブルクリックして構成を開きます
  • 「公開」を「自動的に公開しない」に変更します(これは、Ctrl + Sを押してもサーバーが再起動されないことを意味します)
  • デバッグモードでTomcatを起動する

これはコードの変更を反映しますが、サーバーを再起動しません。

次に、FileSyncプラグインを長い間使用してきました。

  • bin directorからWEB-INF/classestomcatインストールのすべてのクラスを送信するようにプラグインを構成します(これは、デプロイメントアセンブリの構成とほぼ同じです)
  • 他のすべてのリソースを構成して、それぞれの場所に移動する
  • オプションで、filesyncの場所の設定からすべての絶対パスを単一の変数に外部化し、その変数をeclipseで構成します(したがって、すべてのメンバーがeclipseを使用している場合は、filesync設定もコミットできます)。
  • TomcatをEclipseのサーバーリストに追加し、[サーバーの場所]オプションを[Tomcatインストールを使用]に構成します(サーバーリストからtomcatをダブルクリックすると画面が開きます)
  • デバッグモードでTomcatを起動する

それは私にとってはそのように完璧に機能します。再配置せずに、すべての非構造的な変更がすぐに反映されます。

更新:ホットデプロイの方法について
詳しくは、こちらをご覧ください。ワークスペースとサーブレットコンテナーを簡単に同期するプロジェクト
作成しました


@VladimirTsvetkovいいえ-これらは2つの個別のオプションです
Bozho

私はあなたの最初のアプローチを試していますが、Mavenオーバーレイを使用しています。オーバーレイの1つでファイルを変更すると、サーバーは再起動されます(オーバーレイは動的Webプロジェクトではなく動的Webモジュールです)。何か案は?
ホフマン

2
「公開」を「自動的に公開しない」に変更すると、変更時にJSPがリロード/再コンパイルされないという印象を受けました。クラスの再読み込み部分は、Tomcatをデバッグモードで起動することで正常に動作します。
yglodt 2014

5
私は別の方法でそれを行います。最初に、自動的に公開するように変更します。Modules次に、サーバー構成のタブをクリックし、をクリックしてedit、チェックを外しauto deploy enabledます。これが最も簡単な方法だと思います。PS:あなたの最初の方法は私にはうまくいきません。
高速道路2014年

@hiway、サーバー構成タブ内のこの[モジュール]タブはどこにありますか?
マテウスヴィッカリ2014

30

Eclipseにクラスファイルを直接$ TOMCAT / webapps / MyWebApp / WEB_INF / classesディレクトリに書き込むだけです。次に、apache-tomcatを構成して、クラスファイルが更新されているかどうかを確認し、更新されている場合は再ロードします。

クラスが変更されたときにクラスを自動再ロードするようにtomcatを構成するには、以下を行う必要があります。

編集$TOMCAT/conf/context.xmlおよび設定:

<Context reloadable="true"> 

また、webapps/$YourWebApp/web.xmlファイルを編集して再読み込みし、次の行を含める必要がある場合もあります。

<web-app reloadable="true">

両方の変更が必要かどうか覚えていませんが、自動リロードするようにtomcat-6.0.18を構成しました。


ドキュメントによると、tomcat.apache.org / tomcat-6.0-doc / config / context.htmlContextはserver.xmlファイルに要素を配置しないことを推奨していますが、/ WEB-INF / classes /および/ WEB-INFを監視する必要があります/ libを使用して変更します。web-app要素の属性についてどこで読みましたか?
Michael

すみません、あなたの答えを少し読んでください。context.xmlは「Webアプリケーションごとにロードする必要があります」。
Michael

2
Eclipseがクラスファイルを書き込む場所をどのように構成しますか?
yglodt 2014

7

免責事項:私はただの幸せな顧客であり、Zero Turnaroundで働いていません。また、彼らとは何の関係もありません。

JRebelを確認してください。Webアプリケーションを再起動せずにコーディングできます。基本的には、クラスをインストルメント化し、それらの変更を適応させることによって機能します。次のようなホットデプロイよりも多くのケースを処理します。

  • メソッドの追加/削除
  • コンストラクターの追加/削除
  • インターフェースの変更
  • 実装されたインターフェースの追加/削除

これは商用であり(価格の詳細、2018年6月の時点で年間550ドル)、次のようなサードパーティフレームワーク用のプラグインがたくさんあります

  • ギス
  • ストラット2

あなたは無料の試用版を非常に苦痛なく得る-私はあなたにそれを試してみることを勧めます。


2
Jrebel、うまくいくとうまくいきます。そうでない場合、それは悪夢です。私は彼らのサポートで1週間以上頭を叩いてきましたが、それでも私の簡単なSpring MVCセットアップで機能させることができません。私のアプリまたは私のアプリのhelloworldを私に送信しない限り、彼らはそれ以上は役に立ちません。そして、あなたの価格は時代遅れです-彼らは今爆弾を請求します。神に感謝私は彼らの試用版のみを使用しました
happybuddha

現在の価格は$ 365 /年/シートです
Joseph Lust

そして今、その$ 550 /年/シート
frewper

3

Eclipseのワークスペースを\ tomcat \ webappsに変更します。これはあなたの仕事のためだけなので、これでうまくいくはずです。Eclipseで行った変更が同じディレクトリにある場合は、Tomcatがデプロイするアプリケーションを探します


3

サーバービューで、新しいサーバーを作成します。まだサーバーにリソース(プロジェクト)を追加しないでください。サーバーの場所でサーバーをダブルクリックします。「Tomcatインストールを使用」を選択します。「デプロイパス」をtomcatデプロイディレクトリに変更します(例:c:\ server \ Tomcat 7.0.14 \ webapps)。「発行セクション」を拡張します。「ビルドイベント後に自動的に公開する」にチェックを入れます。保存して閉じます。Eclipseメニューから「プロジェクト->自動的にビルド」をチェックします。サーバービューで、サーバーを右クリックして[追加と削除]をクリックし、プロジェクトを公開します。


2

開発用の場合は、Eclipseのwithからの統合Tomcatサーバーを使用しないのはなぜですか?サーバーはウィンドウ->設定で構成できます。設定したら、page.jspというjspがある場合、それを右クリックして、[サーバーで実行]を選択できます。[設定]-> [一般]-> [Webブラウザ]で、組み込みのブラウザまたは外部のブラウザを使用する天気を選択できます。jspに変更を加え、ブラウザーからページを保存して更新します。ブラウザを保存して更新すると、変更が自動的に反映されます。


2

ここで私にとってうまくいくのは:

このようなcontext.xml:

<Context path="/myapp" docBase="myapp" debug="5"
    reloadable="false" antiResourceLocking="false" antiJARLocking="true">
<!-- this because i´m using Spring 3.1 with Tomcat -->
    <Loader     loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" />

</Context>

次に、Eclipseの「サーバー」タブの「モジュール」タブで、デプロイされているすべてのモジュールの「自動再読み込み」を無効にしました。

また、デフォルトの設定で自動公開を許可します。

また、WTPでMavenを使用している場合は、src / main / resourcesの内容を残すことを忘れないでください。Eclipseは最終ビルドのこのフォルダーの内容を除外するように要求しているためです。

これだけで、リソースのホットデプロイでフル(VM)クラスをホットデプロイしました!!!


1

開発環境では、Tomcatサーバーをポイントして、開発中のディレクトリでJSPを検索するだけです。ファイルを保存するとすぐに、変更を確認できます。


1

私は、Spring Loaded JVMエージェントを使用して、開発環境でこれを機能させることができました。私はSpring Webアプリケーションを開発していますが、そのプロジェクトの説明にはそれが

JVMで実行できるバイトコードで使用可能

次の設定を使用して、アタッチされたTomcatインスタンス(通常のEclipse WTPメソッド)に自動的に公開する変更を取得できました。私はEclipse Mars.2(4.5.2)に基づいたSpring Tool Suite 3.7.3を使用しています。

  1. GithubプロジェクトからSpring Loadedの最新リリースJARをダウンロードします。これは、springloaded-1.2.5.RELEASE.jarでテストされています。
  2. 通常どおりEclipseでTomcatサーバーをセットアップします(Tomcat 8.0.30でテスト済み)
  3. EclipseでTomcatサーバーの設定ページを開きます([サーバー]タブ内のサーバーインスタンスをダブルクリックします)。
  4. [サーバーオプション]セクションで、[デフォルトでモジュールの自動再読み込み]をオフにします。
    • 注:サーバーにWebモジュールがすでに追加されている場合は、[モジュール]タブ(構成ページウィンドウの下部)を使用して、それらのモジュールの[自動再読み込み]を個別に無効にする必要がある場合があります。
  5. 「一般情報」セクションで、「起動構成を開く」をクリックします
    • 「引数」タブで、「VM引数」の最後に以下を追加します。 -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • プロジェクトの.classファイルに加えてJARを監視できるようにするには、この問題のコメント-Dspringloaded=watchJars=に従ってVM引数を構成します。

サーバーを起動し、通常どおりに動的Webアプリケーションプロジェクトをサーバーに公開します。繰り返しますが、これをSpring Webアプリケーションでテストすることができました。たとえば、@ Controllerクラスのコードの変更、メソッドの追加/削除などは、ファイルを保存してEclipseがビルドし、変更されたクラスを公開した直後に適用されました。最後に、Spring LoadedプロジェクトのFAQセクションでは、リロードされないいくつかのケースについて言及していたため、サーバー/アプリケーションの再起動が必要になります。しかし、これらの例外はそれほど頻繁ではありません。

もう1つの注意:これは、STSに付属する組み込みのPivotal tc ServerまたはVMware vFabric tc Serverでは機能しません。これらのサーバーについては、「Javaエージェントベースの再読み込みを有効にする(実験的)」オプションがありますが、Spring Loadedの古い1.2.0リリースを使用していますが、これは私には機能しませんでした。


とりあえず取り入れないといけないようですSpringが、Non Spring応募はどうですか。
Tangoo

SpringLoaded JARをTomcat用に構成する必要がありますが、実行中のアプリケーション自体をSpringアプリケーションにする必要はありません(Spring JARを含める必要もありません)。シンプルな単一のHelloWorldサーブレットでこれをうまくテストしました。
martian111 2016年

0

Jettyを開発目的で使用することを受け入れますか?

その場合、Mavenで使用するのは非常に簡単です-実行するだけです mvn jetty:run


0

これは最善の方法ではないかもしれませんが、私にとってはうまくいきます。

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *。jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / project-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc($ contextPathのjarをlib dirにエクスポートする必要があります)
  • $ eclipseWorkbench / project-jsp /

rsyncコマンドを使用して、jspプロジェクトから$ contextPathへの変更を同期します。

EclipseのTomcatでリモートデバッグを使用すると、コードのホットスワップを制限できます。静的フィールドを変更するか、メソッドを追加する場合は、jarをエクスポートしてコンテキストを再起動する必要があります。


0

以下のオプションを使用できますか?Eclipseでサーバーをダブルクリックします->サーバーの場所-> Tomcatのインストールを使用します。Tomcatのインストールを制御します。Javaクラスの変更のためにサーバーを再起動する必要はありません。


0

私は最も単純な方法を見つけました:シンボリックリンクの使用:同期がまったくないため、これが最も速い方法だと思います:tomcatディレクトリとプロジェクトディレクトリは常に同じディレクトリになります。

Tomcatは定期的に変更を検出し、アプリケーションを再デプロイします。

あなたのアプリケーションをデバッグする方法もあるので、私は謙虚に良い解決策だと思います。

興味のある方のために、ここに私の解決策を文書化しました。


自分のローカルマシンを使用してデバッグしていることを意味するlocalhostを使用しているため、リモートJavaアプリケーションを使用する必要がある理由を知ることができます
Karen Goh

0

場合によっては、急いでいます:

  1. EclipseのTomcat(他のコンテナー)で「自動的に公開しない」をチェックします。
  2. デバッグモードでtomcat(その他のコンテナ)を開始します。

出来上がり!:)


0

Eclipseで、トップメニューの[プロジェクト]をクリックし、[自動的にビルド]が選択されていることを確認します。これで問題が解決しました。ワークスペースメタデータを使用してTomcatでEclipseを実行していました。また、動的WebモジュールプロジェクトでMavenを実行していました。確認するには、アプリケーションをTomcatに追加します。Eclipse内からTomcatを起動します。アプリケーションがデプロイされ、実行されていることを確認してください。Eclipseで[コンソール]タブを開きます。アプリケーションに変更を加えます。数秒後、変更が自動的にビルドされ、Tomcatにデプロイされるのがわかります。


-2

最も単純で最も速い:ビルド時にWARファイルを生成するようにEclipseを設定します。ビルド後の手順として、そのWARファイルをtomcat webappsディレクトリにコピーします。Tomcatは変更を認識し、展開を必要とせずにサイトを更新します。これは完璧ではないことに注意してください。そのwebappを使用しているユーザーは、Tomcatが「その下」でwebappを再起動するため、最適なエクスペリエンスが得られない可能性があります。しかし、これはあなたの要求に合います。


1
わかりました...私は自分の意図を明らかにしなかったと思います。私は一部のユーザーにアプリをデプロイすることに本当に興味がありませんが、毎日の開発ニーズのためにEclipseでTomcatを実行し、(変更)->(結果を参照)のフィードバックサイクルを短縮して(作成)の代わりにしようとしています変更)->展開->(結果を参照)
09年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.