Mengintegrasikan tomcat dan eclipse sebagai lingkungan penyebaran panas

88

Saya ingin mengatur eclipse dan tomcat secara terintegrasi sehingga perubahan pada JSP dan servlet saya (jika mungkin) tercermin dengan segera tanpa memerlukan penerapan.

Oke, ini adalah salah satu pertanyaan yang memiliki banyak jawaban di seluruh internet tetapi semuanya tampak berbeda. (gunakan plugin Sysdeo, gunakan plugin JBOss, lakukan hal-hal dengan Eclipse yang sudah ketinggalan zaman, gunakan MyEclipse sebagai gantinya, dll.) dan saya tidak dapat menemukan 1 sumber daya definitif untuk dirujuk. Jadi untuk keuntungan saya, prosedur apa yang paling sederhana dan paling direkomendasikan untuk mengatur ini?

Ini mengasumsikan saya memiliki gerhana dan kucing jantan yang berjalan secara mandiri. Saya sebenarnya telah berhasil mengintegrasikannya dalam mode penerapan non-hot menggunakan petunjuk di sini: http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

Versi Eclipse Versi: 3.4.2 (Ganymede) Tomcat v6.0.20

udit
sumber
17
4 tahun kemudian, saya bingung dengan fakta bahwa itu masih menjadi masalah. Ayolah, ini sangat mendasar.
Konrad Garus
7 tahun kemudian (hampir), saya pikir saya telah menemukan solusi: stackoverflow.com/a/37064672/1034436
martian111

Jawaban:

75

Ada dua pilihan.

Pertama, Eclipse memungkinkan Anda melakukan ini, dengan sedikit perubahan konfigurasi (lihat juga posting mendetail ini )

  • tambahkan Tomcat ke daftar server
  • buat proyek "Proyek web dinamis" (Baik melalui wizard pembuatan atau melalui bagian faset di setelan)
  • tambahkan project ke tomcat, dan konfigurasikan "Deployment assembly" -nya
  • double click tomcat dari daftar untuk membuka konfigurasi
  • Ubah "Terbitkan" menjadi "Jangan pernah terbitkan secara otomatis" (ini berarti server tidak akan dimulai ulang saat Anda menekan ctrl + s)
  • mulai kucing jantan dalam mode debug

Ini masih akan mencerminkan perubahan kode tetapi tidak akan memulai ulang server.

Kedua, saya telah menggunakan plugin FileSync untuk waktu yang lama:

  • konfigurasikan plugin untuk mengirim semua kelas dari bin director ke WEB-INF/classesinstalasi tomcat Anda (ini hampir sama dengan mengkonfigurasi perakitan penerapan)
  • konfigurasikan semua sumber daya lain untuk pergi ke lokasinya masing-masing
  • opsional, eksternalisasi semua jalur absolut dari pengaturan lokasi filesync ke variabel tunggal, dan konfigurasikan variabel itu di eclipse (sehingga Anda juga dapat melakukan pengaturan filesync, jika semua anggota menggunakan eclipse)
  • tambahkan Tomcat ke daftar Server di eclipse, konfigurasikan opsi "Lokasi server" menjadi "Gunakan instalasi tomcat" (layar terbuka saat Anda mengklik dua kali tomcat dari daftar server)
  • mulai kucing jantan dalam mode debug

Ini bekerja dengan sempurna untuk saya seperti itu. Setiap perubahan non-struktural direfleksikan dengan segera, tanpa pemindahan.

Pembaruan:
Anda dapat membaca selengkapnya tentang metode penerapan panas di sini .
Saya juga membuat proyek yang dengan mudah menyinkronkan ruang kerja dengan wadah servlet.

Bozho
sumber
@VladimirTsvetkov no - ini adalah dua opsi terpisah
Bozho
Saya mencoba pendekatan pertama Anda tetapi saya menggunakan Maven Overlay dan ketika saya mengubah file di salah satu overlay, server masih direstart (overlay bukanlah proyek web dinamis tetapi modul web dinamis). Ada ide?
Hoffmann
2
Saya mendapat kesan bahwa dengan mengubah "Publikasi" menjadi "Jangan pernah publikasikan secara otomatis", JSP tidak dimuat ulang / dikompilasi ulang lagi saat diubah. Bagian pemuatan ulang kelas berfungsi dengan baik meskipun dengan memulai Tomcat dalam mode debug.
yglodt
5
Saya melakukannya dengan cara lain: pertama, ubah ke publikasikan secara otomatis; kedua, klik Modulestab di konfigurasi server, lalu klik edit, hapus centang auto deploy enabled, saya rasa ini adalah cara yang paling sederhana. PS: cara pertama Anda tidak berhasil untuk saya.
hiway
@hiway, di manakah tab Modules ini di dalam tab konfigurasi server?
Mateus Viccari
30

Biarkan gerhana menulis file kelas langsung ke direktori $ TOMCAT / webapps / MyWebApp / WEB_INF / kelas. Kemudian, konfigurasikan apache-tomcat untuk memeriksa apakah file kelas telah diperbarui, dan muat ulang jika sudah.

Untuk mengonfigurasi tomcat agar memuat ulang kelas secara otomatis saat kelas berubah, Anda perlu

edit $TOMCAT/conf/context.xmldan setel:

<Context reloadable="true"> 

Anda mungkin juga harus mengedit dan memuat ulang webapps/$YourWebApp/web.xmlfile Anda dan menyertakan:

<web-app reloadable="true">

Saya tidak ingat apakah kedua perubahan diperlukan tetapi begitulah cara saya mengkonfigurasi tomcat-6.0.18 saya untuk memuat ulang otomatis.

Martin Tilsted
sumber
Menurut dokumentasi, tomcat.apache.org/tomcat-6.0-doc/config/context.html mereka merekomendasikan untuk tidak menempatkan Contextelemen di file server.xml, tetapi harus memantau / WEB-INF / kelas / dan / WEB-INF / lib untuk setiap perubahan. Di mana Anda membaca tentang atribut untuk web-appelemen tersebut?
Michael
Maaf, sedikit salah membaca jawaban Anda. Konteks.xml "harus dimuat untuk setiap aplikasi web".
Michael
2
Bagaimana Anda mengkonfigurasi di mana Eclipse menulis file kelas?
yglodt
7

Penafian : Saya hanya pelanggan yang bahagia, saya tidak bekerja untuk Zero Turnaround dan saya sama sekali tidak berafiliasi dengan mereka.

Lihat JRebel - ini memungkinkan Anda untuk membuat kode tanpa restart aplikasi web. Ini pada dasarnya bekerja dengan melengkapi kelas Anda dan menyesuaikan perubahannya. Ini menangani lebih banyak kasus daripada hot deploy , termasuk:

  • Menambahkan / menghapus metode
  • Menambah / menghapus konstruktor
  • Mengubah antarmuka
  • Menambah / menghapus antarmuka yang diimplementasikan

Ini komersial , ( detail harga , $ 550 / tahun per Juni 2018), dan memiliki banyak plugin untuk kerangka pihak ketiga, termasuk:

  • Guice
  • Musim semi
  • Struts 2

Anda mendapatkan uji coba gratis tanpa kesulitan - saya sarankan Anda mencobanya.

Robert Munteanu
sumber
2
Jrebel, ketika berhasil, itu berhasil. Jika tidak, itu mimpi buruk. Saya telah memukuli kepala saya dengan dukungan mereka selama lebih dari seminggu dan saya masih tidak bisa membuatnya berfungsi dalam pengaturan MVC musim semi sederhana saya. Mereka tidak akan membantu lebih jauh tanpa saya mengirimkan aplikasi saya atau dunia aplikasi saya kepada mereka. DAN, harga Anda kedaluwarsa - sekarang harganya sangat mahal. Alhamdulillah saya hanya menggunakan versi percobaan mereka
happybuddha
Harga saat ini adalah $ 365 / tahun / kursi
Joseph Lust
Dan sekarang $ 550 / tahun / kursi
frewper
3

Ubah ruang kerja Anda di Eclipse ke \ tomcat \ webapps Karena ini hanya untuk pekerjaan Anda, ini seharusnya berfungsi dengan baik. Apa pun perubahan yang Anda buat di Eclipse ada di direktori yang sama, tomcat mencari aplikasi untuk diterapkan

PaganSensei
sumber
3

Dalam tampilan server, buat server baru, jangan tambahkan sumber daya (proyek) apa pun ke server. Klik dua kali pada server di lokasi server. Pilih "Gunakan instalasi tomcat". Ubah "Deploy path" ke direktori deploy tomcat (Contoh: c: \ server \ Tomcat 7.0.14 \ webapps). Perluas "bagian Penerbitan". Centang "Publikasikan secara otomatis setelah acara build". Simpan dan tutup. Dari menu gerhana, centang "Proyek -> Bangun secara otomatis". Dari tampilan server, klik kanan pada server Anda, "Tambah dan hapus", publikasikan proyek Anda.

ticu0000
sumber
2

Mengapa tidak menggunakan server kucing jantan terintegrasi dari with in eclipse jika ini hanya untuk pengembangan? Anda dapat mengkonfigurasi server di bawah window-> preferensi. Setelah dikonfigurasi jika Anda memiliki jsp yang disebut page.jsp, Anda dapat mengklik kanan dan memilih jalankan di server. Di bawah preferensi-> umum-> Browser web Anda dapat memilih cuaca untuk menggunakan browser bawaan atau browser eksternal. Buat beberapa perubahan pada jsp Anda, simpan, dan segarkan halaman Anda dari browser. Perubahan akan secara otomatis terlihat setelah Anda menyimpan dan menyegarkan browser Anda.

Jared
sumber
2

Apa yang berhasil untuk saya di sini adalah:

context.xml seperti ini:

<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>

Kemudian, pada tab Server di Eclipse, pada tab "Modules", saya menonaktifkan "Auto Reload" ke semua modul yang sedang digunakan.

Juga biarkan konfigurasi default membiarkan penerbitan otomatis.

Dan menggunakan Maven dengan WTP, jangan lupa untuk membiarkan konten src / main / resources di dalamnya, karena Eclipse bersikeras untuk mengecualikan konten folder ini dari build akhir.

Hanya dengan semua ini saya mendapatkan kelas penuh (VM) hot-deploy dengan resource hot-deploy !!!

chuckw
sumber
1

Di lingkungan pengembangan Anda, cukup arahkan server Tomcat Anda untuk mencari JSP di direktori mana pun Anda mengembangkannya. Segera setelah Anda menyimpan file, Anda akan dapat melihat perubahannya kemudian.

Cameron
sumber
1

Saya berhasil membuat ini berfungsi di lingkungan pengembangan saya menggunakan agen JVM Spring Loaded . Sementara saya mengembangkan aplikasi web Spring, deskripsi proyek itu menyebutkan bahwa itu benar

dapat digunakan di bytecode apa pun yang mungkin berjalan di JVM

Dengan menggunakan pengaturan berikut, saya bisa mendapatkan perubahan untuk dipublikasikan secara otomatis ke instans Tomcat yang terpasang (metode WTP Eclipse biasa). Saya menggunakan Spring Tool Suite 3.7.3 berdasarkan Eclipse Mars.2 (4.5.2).

  1. Unduh JAR rilis terbaru Spring Loaded dari proyek Github mereka . Ini telah diuji dengan springloaded-1.2.5.RELEASE.jar.
  2. Siapkan Server Tomcat di Eclipse seperti biasa (diuji dengan Tomcat 8.0.30)
  3. Buka halaman konfigurasi Server Tomcat di Eclipse (klik dua kali pada instance server dalam tab "Server").
  4. Di bagian "Server Options", hapus centang "Modules auto reload by default".
    • Catatan: Jika Anda sudah menambahkan modul web ke server, Anda mungkin perlu menonaktifkan "Muat Ulang Otomatis" pada modul tersebut satu per satu melalui tab "Modul" (di bagian bawah jendela halaman konfigurasi).
  5. Di bagian "Informasi Umum", klik "Buka konfigurasi peluncuran"
    • Di tab "Argumen", tambahkan baris berikut di akhir "argumen VM": -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Agar JAR dapat ditonton selain .classfile proyek , konfigurasikan -Dspringloaded=watchJars=argumen VM sesuai dengan komentar masalah ini .

Mulai server dan publikasikan proyek Aplikasi Web Dinamis seperti biasa. Sekali lagi, saya dapat menguji ini dengan aplikasi web Spring. Misalnya, memodifikasi kode, menambahkan / mengurangi metode, dll. Di kelas @Controller diterapkan hampir seketika setelah saya menyimpan file dan Eclipse membangun dan menerbitkan kelas yang diubah. Terakhir, bagian FAQ dari proyek Spring Loaded menyebutkan beberapa kasus di mana hal-hal tidak dapat dimuat ulang, jadi itu akan memerlukan restart server / aplikasi. Tetapi pengecualian itu jauh lebih jarang.

Satu catatan lagi: Ini TIDAK berfungsi dengan Pivotal tc Server atau VMware vFabric tc Server yang disertakan dengan STS. Untuk server tersebut, ada opsi "Aktifkan pemuatan ulang berbasis Agen Java (eksperimental)", tetapi opsi tersebut menggunakan rilis Spring Loaded 1.2.0 yang lebih lama, yang tidak berfungsi untuk saya.

martian111
sumber
Sepertinya Anda harus Springmemahami, Bagaimana dengan Non Springaplikasi.
Tangoo
Meskipun Anda memerlukan SpringLoaded JAR untuk dikonfigurasi untuk Tomcat, aplikasi yang berjalan itu sendiri TIDAK perlu aplikasi Spring (atau termasuk Spring JAR). Saya berhasil menguji ini dengan satu HelloWorld Servlet yang sederhana.
martian111
0

Apakah Anda terbuka untuk menggunakan Jetty untuk tujuan pengembangan?

Jika demikian, cukup mudah digunakan dengan Maven - jalankan saja mvn jetty:run

matt b
sumber
0

Ini mungkin bukan cara terbaik, tapi berhasil untuk saya.

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *. jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / project-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc (harus mengekspor jar ke lib dir di $ contextPath)
  • $ eclipseWorkbench / project-jsp /

Saya menggunakan perintah rsync untuk menyinkronkan perubahan dari proyek jsp saya ke $ contextPath.

Gunakan debugging jarak jauh di Eclipse untuk Tomcat yang akan memungkinkan hot-swapping kode terbatas. Jika Anda mengubah bidang statis atau menambahkan metode, Anda perlu mengekspor jar dan memulai ulang konteksnya.

TJR
sumber
0

bisakah kita menggunakan opsi di bawah ini? Klik dua kali pada Server di eclipse -> Lokasi Server -> Gunakan instalasi tomcat. Ini mengambil kendali dari instalasi tomcat. Anda tidak perlu me-restart server untuk perubahan di kelas java.

Tushar Sagar
sumber
0

Saya telah menemukan cara paling sederhana: penggunaan tautan simbolik: Saya rasa ini adalah cara tercepat karena tidak ada sinkronisasi sama sekali: direktori tomcat dan direktori proyek Anda akan menjadi direktori yang sama sepanjang waktu.

Tomcat secara berkala akan mendeteksi perubahan dan menerapkan ulang aplikasi Anda.

Ada juga cara untuk men-debug aplikasi Anda, jadi menurut saya ini adalah solusi yang baik.

Saya telah mendokumentasikan solusi saya di sini , untuk siapa pun yang tertarik.

Raul Luna
sumber
dapatkah saya tahu mengapa ada kebutuhan untuk menggunakan aplikasi java jarak jauh karena menggunakan localhost yang berarti saya men-debug menggunakan mesin lokal saya sendiri
Karen Goh
0

Jika Anda sedang terburu-buru:

  1. centang "tidak pernah mempublikasikan secara otomatis" di tomcat (wadah lain) di gerhana.
  2. mulai kucing jantan (penampung lain) dalam mode debug.

voila! :)

Sachin Verma
sumber
0

Di Eclipse, klik Project di menu atas dan pastikan "Build Automatically" dipilih. Ini memperbaiki masalah saya. Saya menjalankan Eclipse dengan Tomcat menggunakan metadata ruang kerja saya. Saya juga menjalankan Maven dalam proyek Modul Web Dinamis. Untuk memverifikasi, tambahkan aplikasi Anda ke Tomcat. Mulai Tomcat dari dalam Eclipse. Pastikan aplikasi Anda diterapkan dan dijalankan. Buka tab Konsol di Eclipse. Buat perubahan dalam aplikasi Anda. Setelah beberapa detik, Anda akan melihat perubahan Anda dibuat dan diterapkan secara otomatis ke Tomcat.

NLessani
sumber
-2

Paling sederhana, tercepat: setel Eclipse untuk menghasilkan file WAR saat Anda membangun; sebagai langkah pasca-pembuatan, salin file WAR itu ke direktori webapps tomcat Anda. Tomcat akan mengenali perubahan dan menyegarkan situs tanpa perlu penerapan. Perhatikan bahwa ini tidak sempurna; pengguna yang menggunakan aplikasi web tersebut mungkin memiliki pengalaman yang kurang optimal, karena Tomcat memulai ulang aplikasi web "di bawah" mereka; tapi ini memang sesuai dengan permintaan Anda.

Paul Sonier
sumber
1
ok ... Saya kira saya tidak menjelaskan niat saya. Saya benar-benar tidak tertarik untuk menerapkan aplikasi ke beberapa pengguna, tetapi saya mencoba menjalankan tomcat dengan eclipse untuk kebutuhan pengembangan sehari-hari saya dan untuk mempersingkat siklus umpan balik (buat perubahan) -> (Lihat Hasil) daripada (Buat Ubah) -> Terapkan -> (Lihat Hasil)
udit