IntelliJ dan Tomcat… file yang diubah tidak secara otomatis dikenali oleh Tomcat

137

Saya menjalankan Intellij Ultimate dengan Tomcat dan menyebarkan perang. Semuanya diterapkan dengan baik ke direktori webapp tomcat.

Ketika saya mengubah file seperti file xhtml, apakah ada cara agar tomcat secara otomatis mengambil perubahan itu? Untuk saat ini saya perlu menyalin file dari Intellij dan menyalinnya ke direktori tempatnya berada di direktori aplikasi web tomcat. Saya tahu ada file tertentu yang perlu dikompilasi ulang, tetapi xhtmls bukan salah satunya.

Peter
sumber

Jawaban:

22

Izinkan saya menjelaskan urutan tindakan menggunakan tangkapan layar:

  1. Buka konfigurasi Tomcat Run / Debug Anda (Run> Edit Configurations)

masukkan deskripsi gambar di sini

  1. Klik ikon tambah, pilih 'artefak', lalu pilih pizza_mvc:war exploded: masukkan deskripsi gambar di sini

  2. Ubah 'On update action' dan 'On frame diactivation': masukkan deskripsi gambar di sini

  3. Setiap kali Anda ingin menyegarkan sumber daya Anda, tekan <Ctrl> + F10

Lord Nighton
sumber
Terima kasih telah mengingatkan saya untuk memeriksa "On 'Update' action"
km1
292

Ini tidak dapat dilakukan jika Anda menyebarkan perang dengan IntelliJ IDEA. Namun, itu bisa terjadi jika Anda menyebarkan perang yang meledak . Dalam IDEA:

  1. buka konfigurasi Tomcat Run / Debug Anda ( Run> Edit Configurations )
  2. Buka tab "Penerapan"
  3. Di bagian "Deploy at Server Startup", hapus (jika ada) artefak my-webapp-name:war
  4. Klik ikon tambah, pilih 'artefak', lalu pilih my-webapp-name:war exploded
  5. Klik OK (pada dialog "Pilih Artefak untuk Disebarkan")
  6. Masih di Jendela Konfigurasi Run / Debug, pilih tab "Server"
  7. Di tengah tab itu, ubah pengaturan "On frame Deactivation" menjadi "Update resources" atau "Update Classes and Resources"
    • Memperbarui sumber daya: Semua sumber daya yang diubah (yaitu, semua komponen aplikasi selain kelas) akan diperbarui.
    • Perbarui kelas dan sumber daya: Semua sumber daya yang diubah akan diperbarui; kelas yang diubah akan dikompilasi ulang. Perhatikan bahwa apakah kelas yang sebenarnya akan diperbarui tergantung pada kemampuan server web. Jika saya ingat, Tomcat akan memuat ulang file html / xhtml dan jsp, tetapi bukan Servlet atau kelas yang digunakan JSP atau Servlet. Anda perlu memodifikasi Tomcat untuk menggunakan classloader dinamis untuk itu.
  8. Anda juga dapat menyetel tindakan " On 'update' " ke yang dipilih di atas juga.
    • Ini menentukan apa yang terjadi ketika Anda menekan Ikon pembaruanikon Perbarui (atau Ctrl+ F10) di jendela Jalankan.
    • "Tampilkan dialog" menentukan apakah IDEA meminta Anda setiap kali Anda menekan ikon pembaruan
  9. Klik OK.

Sekarang kapan pun Anda membuat perubahan, IDEA akan menerapkan ulang file yang diubah saat bingkai IDEA dinonaktifkan (yaitu kehilangan fokus). Diperlukan satu atau dua detik, Anda akan melihatnya di bilah status bawah di IDEA. Jelas sekali. Anda masih perlu menyegarkan browser web Anda sehingga mengambil file baru (kecuali tentu saja jika laman tersebut memiliki penyegaran otomatis ajax like fetch).

Kombinasi yang baik dengan Tomcat adalah dengan menyetel "On frame deactivation" ke "Update Resources" dan tindakan "On 'update' ke" Redeploy "atau" Restart Server ". Hal ini memungkinkan halaman statis diperbarui dengan cepat melalui penonaktifan frame, dan kelas diperbarui melalui tindakan 'perbarui'.

Sebuah perusahaan bernama ZeroTurnaround menjual JRebel yang merupakan solusi classloader dinamis. Mereka juga memiliki rangkaian lima bagian tentang subjek yang sangat bagus.

Javaru
sumber
Saya mengalami kesalahan: Error: Artifact 'my-webapp-name:war exploded' has invalid extensionbagaimana cara memperbaikinya?
Anton Dozortsev
3
Saya juga sangat merekomendasikan menggunakan DCEVM untuk memuat ulang kelas otomatis. Anda kemudian dapat menggunakan "Perbarui kelas dan sumber daya" untuk menerapkan perubahan apa pun ke kode sumber tanpa menerapkan ulang aplikasi. Lihat: blog.jetbrains.com/idea/2013/07/… . Selain dari penjelasan tutorial ini, Anda juga perlu menyetel JAVA_HOME di tab Setup / Connection - Debug dari Tomcat Run Configuration untuk mengarah ke JRE DCEVM.
Alex Fedulov
1
@ yaroslavprokipchyn - Saya tidak akrab dengan JBoss dan persyaratan 'khusus' yang mungkin dimilikinya. Tapi sejauh yang saya tahu, itu harus berfungsi sama. Untuk tomcat, IDEA membuat konfigurasi Tomcat (context.xml) yang memberi tahu Tomcat untuk menggunakan direktori target / {contextName} sebagai direktori root webapp. Anda mungkin ingin memeriksa panduan bantuan untuk informasi spesifik JBOss.
Javaru
3
Pada langkah 7, Anda tidak akan (setidaknya di Intellij 14) mendapatkan pilihan dropdown yang sesuai kecuali Anda telah memuat semua artefak Anda sebagai "meledak".
mortensi
1
@ChiefTwoPencils - Langkah 5 adalah mengklik OK pada dialog "Pilih Artefak untuk Disebarkan" (yang tidak ada "terapkan"), bukan jendela konfigurasi Jalankan / Debug. Saya menambahkan pernyataan klarifikasi ke langkah 5.
Javaru
12

Jika Anda ingin memperbarui kelas dan sumber daya, jalankan Tomcat dalam mode Debug . Dalam mode ini IntelliJ memperbarui kelas dan sumber daya tanpa masalah (hot swap).

Punya masalah yang sama. IntelliJ tidak memperbarui proyek saya, karena saya menjalankan sebagai "mode Jalankan". Ketika saya menjalankan dalam mode debug dan menekan Ctrl+ F10, kelas dan sumber daya diperbarui.

Łukasz Woźniak
sumber
Control-F10 memperbaiki masalah saya. Terima kasih!
Jeffrey Getzin
3

Saya telah menemukan cara yang lebih baik.

Di Eclipse kami secara otomatis membuat, mengkompilasi + memuat ulang file statis. Sebenarnya file statis disajikan langsung dari src / main / webapp .

Di IntelliJ alih-alih melayani langsung dari src / main / webapp , ada folder yang dibuat di target, di mana Anda akan memiliki salinan src / main / webapp Anda dan juga konteks lain yang terkait .. web-inf / class / lib.

Jika Anda menempatkan alih-alih target keluaran artefak yang meledak ke src / main / webapp , itu tidak akan menimpa file sumber Anda, dan itu akan ditayangkan secara langsung, Anda tidak perlu menekan - perbarui sumber daya / perbarui sumber daya dan kelas

Jadi yang perlu Anda lakukan di IntelliJ adalah

  1. memodifikasi direktori keluaran artefak yang meledak ke src / main / webapp masukkan deskripsi gambar di sini
  2. buat makro untuk menyimpan dan mengkompilasi ulang / mengkompilasi kelas-kelas kotor (cmd + shift + f9) masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini
  3. edit registri dan preferensi untuk membangun secara otomatis dan membangun saat aplikasi berjalan (cmd + shift + a - registry). masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Setelah ini, jika Anda memiliki pekerjaan yang mengubah file statis dari luar IntelliJ, Anda akan segera melihat perubahan tanpa membuka IntelliJ dan Perbarui Sumber Daya , dan untuk kelas Anda memiliki makro yang menyimpan, dan kompilasi (Catatan: Anda juga bisa menekan Kompilasi / Kompilasi ulang: cmd + shift + F9 / cmd + F9 - jika Anda memiliki beberapa editor yang terbuka akan melihat bahwa editor * kotor Anda tidak akan kotor, dan perubahan (kelas) akan dimuat ulang)

Radu Toader
sumber
Tampaknya jika Anda memiliki registry compiler.automake .. diaktifkan itu mendorong perubahan Anda dengan hanya menekan simpan juga.
Radu Toader
0

Itu hanya mungkin ketika Anda menyebarkan folder perang yang meledak, mengaktifkan pemuatan ulang panas, dan memulai kucing jantan dalam mode debug.

Ini adalah langkah-langkah untuk mencapai ini.

  1. buka konfigurasi Tomcat Run / Debug Anda (Run> Edit Configurations)
  2. Buka tab "Deployment" 3. Di bagian "Deploy at Server Startup", hapus (jika ada) artefak my-webapp-name: war
  3. Klik ikon tambah, pilih 'artefak', lalu pilih nama-webapp-saya: perang meledak
  4. Klik OK (pada dialog "Pilih Artefak untuk Disebarkan")
  5. Masih di Jendela Konfigurasi Run / Debug, pilih tab "Server"
  6. Ubah pengaturan "On frame Deactivation" dan "On Update Action" menjadi "Update class dan resource"
  7. Terapkan dan simpan
  8. Pergi ke pengaturan proyek normal dengan mengklik File kemudian Pengaturan ATAU Menekan CTRL + ALT + S
  9. buka "Build, Execution, Deployment"
  10. Penyusun
  11. Pilih Bangun proyek secara otomatis
  12. menyimpan
  13. Mulai kucing jantan dalam mode debug
Adindu Stevens
sumber
0

jika Anda memiliki multipartfile yang ingin Anda lihat / putar segera, unggah langsung ke folder target. * (hanya mengubah lokasi tulis ke folder target / statis /)

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

Anda akan dapat segera melihat file Anda tanpa harus memulai ulang IDE

Esther
sumber