IntelliJとTomcat…変更されたファイルがTomcatによって自動的に認識されない


135

Intellij UltimateをTomcatで実行して、戦争を展開しています。すべてがtomcatのwebappディレクトリにうまくデプロイされます。

xhtmlファイルのようなファイルを変更した場合、tomcatがその変更を自動的に取得する方法はありますか?今のところ、Intellijからファイルをコピーし、それをtomcat Webアプリディレクトリのあるディレクトリにコピーする必要があります。再コンパイルが必要な特定のファイルがあることは知っていますが、xhtmlはそれらの1つではありません。

回答:


20

スクリーンショットを使用してアクションのシーケンスを説明しましょう:

  1. Tomcat実行/デバッグ構成を開きます(「実行」>「構成の編集」)

ここに画像の説明を入力してください

  1. 追加アイコンをクリックし、「アーティファクト」を選択して、次を選択しますpizza_mvc:war explodedここに画像の説明を入力してください

  2. 「更新アクション時」と「フレーム非アクティブ化時」を変更します。 ここに画像の説明を入力してください

  3. リソースを更新するたびに、 <Ctrl> + F10


「[更新]アクション時」を確認するよう
通知し

290

IntelliJ IDEAで戦争を展開する場合、これは実行できません。ただし、爆発戦争を展開する場合可能です。IDEAの場合:

  1. Tomcat実行/デバッグ構成を開きます(「実行」>「構成の編集」
  2. 「展開」タブに移動します
  3. [サーバーの起動時に展開]セクションで、アーティファクトを削除します(存在する場合) my-webapp-name:war
  4. 追加アイコンをクリックし、「アーティファクト」を選択してから、 my-webapp-name:war exploded
  5. [OK]をクリックします([デプロイするアーティファクトの選択]ダイアログで)。
  6. 引き続き[実行/デバッグ構成]ウィンドウで、[サーバー]タブを選択します
  7. そのタブの中央で、[On frame Deactivation]設定を[Update resources]または[Update Classes and Resources]に変更します
    • リソースを更新:変更されたすべてのリソース(つまり、クラス以外のすべてのアプリケーションコンポーネント)が更新されます。
    • クラスとリソースの更新:変更されたすべてのリソースが更新されます。変更されたクラスは再コンパイルされます。実際のクラスが更新されるかどうかは、機能Webサーバーに依存することに注意してください。思い出すと、Tomcatはhtml / xhtmlとjspファイルをリロードしますが、JSPまたはサーブレットが使用するサーブレットまたはクラスはリロードしません。そのために動的クラスローダーを使用するには、Tomcatを変更する必要があります。
  8. On 'update'」アクションを上で選択したアクションに設定することもできます。
    • これにより、「実行」ウィンドウで「更新」更新アイコンアイコン(またはCtrl+ F10)を押すとどうなるかが決まりました。
    • 「ダイアログを表示」は、更新アイコンを押すたびにIDEAがプロンプトを表示するかどうかを決定します
  9. OKをクリックします。

これで、変更を加えるたびに、IDEAのフレームが非アクティブ化される(つまり、フォーカスを失う)と、変更されたファイルがIDEAによって再デプロイされます。これには1、2秒かかります。IDEAの下のステータスバーに表示されます。明らかに。新しいファイルをフェッチするために、Webブラウザーを更新する必要があります(もちろん、ページにfetchのようなajaxの自動更新がある場合は除きます)。

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

ZeroTurnaroundという名前の会社が、動的クラスローダーソリューションであるJRebelを販売しています。彼らはまた、非常に良い主題についての5つのパートシリーズを持っています。


エラーがあります:Error: Artifact 'my-webapp-name:war exploded' has invalid extension修正方法は?
アントンDozortsev 2014年

3
また、クラスの自動再読み込みにはDCEVMを使用することを強くお勧めします。その後、「クラスとリソースの更新」を使用して、アプリケーションを再デプロイせずにソースコードに変更を適用できます。参照:blog.jetbrains.com/idea/2013/07/…。このチュートリアルの説明に加えて、Tomcat実行構成の「設定/接続-デバッグ」タブでJAVA_HOMEを設定して、DCEVMのJREを指すようにする必要があります。
Alex Fedulov 2014年

1
@yaroslavprokipchyn-私はJBossと、JBossが持つ可能性のある「特別な」要件について詳しくありません。しかし、私の知る限り、同じように機能するはずです。Tomcatの場合、IDEAはTomcat(context.xml)構成を作成して、Tomcatにtarget / {contextName}ディレクトリをwebappルートディレクトリとして使用するように指示します。JBO固有の情報については、ヘルプガイドを確認してください。
Javaru、2014年

3
手順7では、すべてのアーティファクトが「分解」としてロードされていない限り、(少なくともIntellij 14では)適切なドロップダウンの選択肢を取得できません。
mortensi

1
@ChiefTwoPencils-ステップ5は、「適用するアーティファクトの選択」ダイアログ(「適用」がないもの)の「実行」/「デバッグ」構成ウィンドウではなく、「OK」をクリックしています。私は、ステップ5に明確に文を追加
Javaru

12

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

同じ問題を得た。「実行モード」で実行しているため、IntelliJはプロジェクトを更新しませんでした。デバッグモードで実行してCtrl+ を押すとF10、クラスとリソースが更新されます。


Control-F10で問題が解決しました。ありがとうございました!
Jeffrey Getzin

3

私はもっ​​と良い方法を見つけました。

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

IntelliJの代わりから直接提供のsrc /メイン/ webアプリ、あなたのコピーを持つことになりますたターゲットで作成したフォルダがあり、SRC /メイン/ webappのと、他のコンテキスト関連の... WEB-INF /クラス/ libに。

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

IntelliJで行う必要があるのは

  1. 分解アーティファクト出力ディレクトリをsrc / main / webappに変更します ここに画像の説明を入力してください
  2. ダーティークラスを保存および再コンパイル/コンパイルするためのマクロを作成(cmd + shift + f9) ここに画像の説明を入力してください ここに画像の説明を入力してください
  3. レジストリと設定を編集して、自動的にビルドし、アプリの実行中にビルドします(cmd + shift + a-レジストリ)。 ここに画像の説明を入力してください ここに画像の説明を入力してください

この後、IntelliJの外部から静的ファイルを変更するジョブがある場合、IntelliJおよびUpdate Resourcesに移動せずにすぐに変更が表示されます。クラスの場合、保存するマクロがあり、コンパイルします(注:Compile /再コンパイル:cmd + shift + F9 / cmd + F9-複数のエディターを開いている場合、ダーティエディターがダーティではないことがわかり、変更(クラス)が再ロードされます)


レジストリcompiler.automake ..が有効になっている場合は、保存のみを押すだけで変更がプッシュされるようです。
Radu Toader

0

これは、展開されたwarフォルダーをデプロイし、ホットリロードを有効にして、Tomcatをデバッグモードで起動した場合にのみ可能です。

これらはこれを達成するためのステップです。

  1. Tomcat実行/デバッグ構成を開きます([実行]> [構成の編集])
  2. [Deployment]タブに移動します。3. [Deploy at Server Startup]セクションで、アーティファクトmy-webapp-name:warを削除します(存在する場合)。
  3. 追加アイコンをクリックし、「アーティファクト」を選択してから、my-webapp-name:war expandedを選択します
  4. [OK]をクリックします([デプロイするアーティファクトの選択]ダイアログで)。
  5. 引き続き[実行/デバッグ構成]ウィンドウで、[サーバー]タブを選択します
  6. 「フレーム非アクティブ化時」および「更新アクション時」の設定を「クラスとリソースの更新」に変更します。
  7. 適用して保存
  8. [ファイル]、[設定]の順にクリックするか、CTRL + ALT + Sを押して、通常のプロジェクト設定に移動します
  9. goto「ビルド、実行、デプロイメント」
  10. コンパイラ
  11. [プロジェクトを自動的にビルド]を選択します
  12. 保存する
  13. デバッグモードでTomcatを起動する

0

すぐに表示/再生するマルチパートファイルがある場合は、targetfolderに直接アップロードします。*(書き込み場所をターゲットフォルダー/静的/にのみ変更)

String yourpath = C\\andSoForth
    yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

IDEを再起動しなくても、ファイルをすぐに表示できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.