IntelliJとTomcat...変更したファイルがTomcatで自動認識されない

Intellij UltimateをTomcatで動作させ、warをデプロイしています。 tomcatのwebappディレクトリにすべて正常にデプロイされます。

xhtmlファイルのようなファイルを変更した場合、tomcatが自動的にその変更を拾う方法はありますか? 今のところ、intellij からファイルをコピーして、tomcat の webapp ディレクトリにあるファイル のあるディレクトリにコピーする必要があります。 リコンパイルが必要なファイルがあることは知っていますが、xhtml'はそのうちの一つではありません。

ソリューション

IntelliJ IDEAでwarをデプロイした場合は、このようなことはできません。しかし、分解された戦争をデプロイする場合は、可能です。IDEAで。

  1. TomcatのRun/Debug設定を開く(Run > Edit Configurations) 2.2. 「デプロイメント」タブを開きます。 3.3. "サーバー起動時にデプロイ"セクションで、アーティファクト my-webapp-name:war を削除します(存在する場合)。 4.追加アイコンをクリックし、 'artifact' を選択し、my-webapp-name:war explodedを選択します。 5.5. OK をクリックします(quot;Select Artifacts to Deploy" ダイアログ上で)。 6.6. Run/Debug Configuration Windowで、"Server"タブを選択します。 7.7. そのタブの真ん中にある "On frame Deactivation" の設定を "Update resources" または "Update Classes and Resources&quot のいずれかに変更する。
  • Update resources: 変更されたすべてのリソース(つまり、クラス以外のすべてのアプリケーション コンポーネント)が更新されます。
  • クラスとリソースの更新:_ 変更されたすべてのリソースが更新され、変更されたクラスは再コンパイルされます。実際のクラスが更新されるかどうかは、機能ウェブサーバーに依存することに注意してください。私の記憶では、Tomcatはhtml/xhtmlとjspファイルを再読み込みしますが、ServletやJSPやServletが使用するクラスは再読み込みされないと思います。そのためには、Tomcatを改造して動的クラスローダを使用する必要があります。 8.8. "On 'update' " アクションを、同様に上で選択したものに設定することもできます。
  • これは、実行ウィンドウの Update アイコン(または Ctrl+F10 )を押したときの動作を決定するものです。
  • IDEAが更新アイコンを押すたびにプロンプトを表示するかどうかは、quot;Show dialog"で決定されます。 8.OKをクリックします。

これで、IDEAのフレームが非アクティブになったとき(フォーカスがなくなったとき)、IDEAはいつでも変更したファイルを再展開するようになりました。IDEAの下のステータスバーで確認できます。もちろん、新しいファイルを取得するために、Webブラウザを更新する必要があります。

Tomcatとの良い組み合わせは、"On frame deactivation" を "Update Resources" に、"On 'update' アクションを "Redeploy" または "Restart Server" に設定する事です。これにより、静的ページはフレームの非アクティブ化によって、クラスは 'update' アクションによって素早く更新されるようになります。

ZeroTurnaroundという会社は、動的クラスローダソリューションであるJRebelを販売しています。また、このテーマに関する5つのパートがあり、非常に優れています。

解説 (15)

それでは、一連の動作をスクリーンショットで説明しましょう。

1.TomcatのRun/Debug設定を開きます(Run > Edit Configurations)。

[ここに画像の説明を入力][1]

2.追加アイコンをクリックし、 'artifact' を選択し、 pizza_mvc:war exploded を選択します。

3.'更新時アクション'と 'フレーム非活性化時'を修正します。 ここに画像の説明を入力3

4.リソースを更新するたびに、+ F10を押します。

解説 (1)

クラスとリソースを更新したい場合は、TomcatDebugモードで実行します。このモードでは、IntelliJは問題なくクラスとリソースを更新します(ホットスワップ)。

同じ問題が発生しました。IntelliJは、私が"Run mode"として実行したため、私のプロジェクトを更新しませんでした。デバッグモードで実行し、 Ctrl+F10 を押すと、クラスとリソースが更新されます。

解説 (1)

私はより良い方法を見つけました。

Eclipse では、静的ファイルを自動的にビルド、コンパイル、またはリロードしています。 実際には、静的ファイルは src / main / webapp から直接提供されます。

IntelliJ では、 src / main / webapp から直接提供する代わりに、ターゲットに作成されたフォルダーがあり、 src / main / webapp のコピーとその他のコピーがあります。関連するコンテキスト。 .. web-inf / classes / lib。

爆発したアーティファクトの出力をターゲットの代わりに src / main / webapp に置くと、ソースファイルが上書きされず、直接サービスが提供されます。ヒットする必要はありません- 更新リソース/更新リソースとクラス

したがって、IntelliJで行う必要があるのはです。

1。 分解されたartifact出力ディレクトリをsrc / main / webappに変更します。 。![ここに画像の説明を入力してください](https://i.stack.imgur.com/5qxcg.jpg。)。 2。 汚れたクラスを保存および再コンパイル/コンパイルするためのマクロを作成します(cmd + shift + f9)。 。![ここに画像の説明を入力してください](https://i.stack.imgur.com/BS22B.jpg。)。![ここに画像の説明を入力してください](https://i.stack.imgur.com/swh2o.jpg。)。 3。 レジストリと設定を編集して自動的にビルドし、アプリの実行中にビルドします(cmd + shift + a-registry)。 。![ここに画像の説明を入力してください](https://i.stack.imgur.com/o0v9q.jpg。)。![ここに画像の説明を入力してください](https://i.stack.imgur.com/Rgcbg.jpg。)

この後。, IntelliJの外側から静的ファイルを変更するジョブがある場合。, IntelliJやアップデートリソースに行かなくても、すぐに変更が表示されます。, クラスには、保存するマクロがあります。, コンパイルします。(注:[コンパイル/再コンパイル]をクリックすることもできます:cmd +シフト+ F9 / cmd + F9-複数のエディターを開いていると、ダーティ*エディターが汚れていないことがわかります。, そして変更。(クラス。) リロードされます。)

解説 (1)