Sıcak dağıtım ortamı olarak tomcat ve eclipse'i entegre etme


88

Eclipse ve tomcat'i, JSP'lerimdeki ve sunucu uygulamalarımdaki (mümkünse) değişikliklerin bir dağıtım gerektirmeden anında yansıtılacağı şekilde entegre bir şekilde kurmak istiyorum.

Tamam, bu internette birçok cevabı olan sorulardan biri ama hepsi farklı görünüyor. (Sysdeo eklentisini kullanın, JBOss eklentisini kullanın, eski bir Eclipse ile işler yapın, yerine MyEclipse kullanın vb.) ve başvurulacak kesin 1 kaynak bulamadım. Öyleyse, benim yararıma, bunu ayarlamak için en basit ve en çok önerilen prosedür nedir?

Bu, eclipse ve tomcat'in bağımsız olarak çalıştığını varsayıyor. Aslında, buradaki talimatları kullanarak bunları sıcak olmayan bir dağıtım tarzında entegre etmeyi başardım: http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

Eclipse sürümü Sürüm: 3.4.2 (Ganymede) Tomcat v6.0.20


17
4 yıl sonra, bunun hala bir sorun olması beni şaşırttı. Hadi, bu oldukça temel.
Konrad Garus

7 yıl sonra (neredeyse), sanırım bir çözüm keşfettim: stackoverflow.com/a/37064672/1034436
martian111

Yanıtlar:


75

İki seçenek var.

İlk olarak Eclipse, küçük bir yapılandırma değişikliği ile bunu yapmanıza izin verir (ayrıca bu ayrıntılı gönderiye bakın )

  • Tomcat'i sunucu listesine ekle
  • projeyi "Dinamik web projesi" yapın (Oluşturma sihirbazı aracılığıyla veya ayarlardaki özellikler bölümünden)
  • projeyi tomcat'e ekleyin ve "Dağıtım derlemesini" yapılandırın
  • konfigürasyonları açmak için listeden tomcat'e çift tıklayın
  • "Yayınlama" yı "Asla otomatik olarak yayınlama" olarak değiştirin (bu, ctrl + s tuşlarına bastığınızda sunucunun yeniden başlatılmayacağı anlamına gelir)
  • tomcat'i hata ayıklama modunda başlat

Bu yine de kod değişikliklerini yansıtacak ancak sunucuyu yeniden başlatmayacaktır.

İkincisi, FileSync eklentisini uzun süredir kullandım:

  • eklentiyi, bin yöneticisinden WEB-INF/classestomcat kurulumunuzun tüm sınıflarını gönderecek şekilde yapılandırın (bu, dağıtım derlemesini yapılandırmakla hemen hemen aynıdır)
  • diğer tüm kaynakları kendi konumlarına gidecek şekilde yapılandırın
  • isteğe bağlı olarak, filesync konum ayarlarından tek bir değişkene tüm mutlak yolları haricileştirin ve bu değişkeni tutulmada yapılandırın (böylece tüm üyeler tutulma kullanıyorsa, dosya senkronizasyon ayarlarını da gerçekleştirebilirsiniz)
  • Tutulmadaki Sunucular listesine Tomcat'i ekleyin, "Sunucu konumları" seçeneğini "Tomcat kurulumunu kullan" olarak yapılandırın (sunucular listesinden tomcat'e çift tıkladığınızda ekran açılır)
  • tomcat'i hata ayıklama modunda başlat

Benim için bu şekilde mükemmel çalışıyor. Yapısal olmayan her değişiklik, yeniden dağıtım yapılmadan anında yansıtılır.

Güncelleme: Burada sıcak dağıtım yöntemleri
hakkında daha fazla bilgi edinebilirsiniz .
Ayrıca çalışma alanını sunucu uygulaması konteyneriyle kolayca senkronize eden bir proje oluşturdum .


@VladimirTsvetkov hayır - bu iki ayrı seçenek vardır
Bozho

İlk yaklaşımınızı deniyorum ama Maven Overlays kullanıyorum ve overlay'lerden birinde bir dosyayı değiştirdiğimde sunucu hala yeniden başlatılıyor (overlay dinamik web projesi değil dinamik web modülü). Herhangi bir fikir?
Hoffmann

2
"Yayınlama" yı "Asla otomatik olarak yayınlama" olarak değiştirerek, JSP'lerin değiştirildiğinde artık yeniden yüklenmediği / yeniden derlenmediği izlenimine sahibim. Sınıf yeniden yükleme kısmı Tomcat'i hata ayıklama modunda başlatarak iyi çalışıyor.
yglodt

5
Bunu başka bir şekilde yapıyorum: önce, otomatik olarak yayınlamak için değiştirin; ikinci olarak, Modulessunucu yapılandırmasında sekmeyi tıklayın , ardından tıklayın edit, işareti kaldırın auto deploy enabled, bence bu en basit yol. Not: İlk yolunuz benim için çalışmıyor.
merhaba

@hiway, sunucu yapılandırma sekmesinin içindeki bu Modüller sekmesi nerede?
Mateus Viccari

30

Eclipse'in sınıf dosyalarını doğrudan $ TOMCAT / webapps / MyWebApp / WEB_INF / classes dizinine yazmasına izin verin. Ardından, sınıf dosyalarının güncellenip güncellenmediğini kontrol etmek için apache-tomcat'i yapılandırın ve varsa onları yeniden yükleyin.

Tomcat'i bir sınıfı değiştiğinde otomatik olarak yeniden yükleyecek şekilde yapılandırmak için

düzenle $TOMCAT/conf/context.xmlve ayarla:

<Context reloadable="true"> 

webapps/$YourWebApp/web.xmlDosyanızı düzenlemeniz ve yeniden yüklemeniz ve şunları eklemeniz de gerekebilir :

<web-app reloadable="true">

Her iki değişikliğin de gerekli olup olmadığını hatırlayamıyorum, ancak tomcat-6.0.18'imi otomatik yeniden yüklenecek şekilde yapılandırdım.


Tomcat.apache.org/tomcat-6.0-doc/config/context.html belgelerine göre Context, server.xml dosyasına eleman yerleştirilmesini önermiyorlar , ancak / WEB-INF / classes / ve / WEB- INF'i izlemelidir herhangi bir değişiklik için / lib. web-appÖğenin özniteliğini nerede okudunuz ?
Michael

Üzgünüm, cevabınızı biraz yanlış okuyun. Context.xml "her web uygulaması için yüklenmelidir".
Michael

2
Eclipse'in sınıf dosyalarını nereye yazacağını nasıl yapılandırırsınız?
yglodt

7

Sorumluluk reddi : Ben sadece mutlu bir müşteriyim, Zero Turnaround için çalışmıyorum ve onlarla hiçbir şekilde bağlantım yok.

JRebel'e göz atın - web uygulaması yeniden başlatmadan kod yazmanıza olanak tanır. Temel olarak sınıflarınızı enstrümantasyon yaparak ve değişikliklerini uyarlayarak çalışır. Sıcak dağıtımdan çok daha fazla vakayı ele alır :

  • Yöntem ekleme / çıkarma
  • Oluşturucu ekleme / kaldırma
  • Arayüzleri değiştirme
  • Uygulanan arayüzleri ekleme / kaldırma

Bu var ticari ( fiyatlandırma ayrıntıları Haziran 2018 tarihi itibariyle 550 $ / yıl) ve bir sürü vardır eklentileri üçüncü parti çerçeveler, dahil olmak üzere:

  • Guice
  • İlkbahar
  • Dikmeler 2

Oldukça acısız bir şekilde ücretsiz deneme alıyorsunuz - bir şans vermenizi öneririm.


2
Jrebel, çalıştığı zaman işe yarıyor. Olmadığında, bu bir kabus. Bir haftadan fazla bir süredir onların desteğiyle kafamı dövüyorum ve hala basit yaylı mvc kurulumumda çalışmasını sağlayamıyorum. Ben onlara uygulamamı veya uygulamamın yardım dünyasını göndermeden daha fazla yardımcı olmayacaklar. VE fiyatlarınız güncel değil - şimdi bir bomba alıyorlar. Tanrıya şükür sadece deneme versiyonlarını kullandım
happybuddha

Geçerli fiyat $ 365 / yıl / koltuk
Joseph Lust

Ve şimdi 550 $ / yıl / koltuk
frewper

3

Eclipse'deki çalışma alanınızı \ tomcat \ webapps olarak değiştirin Yalnızca sizin işiniz için olduğundan, bu iyi çalışmalıdır. Eclipse'de yaptığınız değişiklikler her ne olursa olsun, tomcat konuşlandırılacak uygulamaları arar.


3

Sunucular görünümünde, yeni bir sunucu oluşturun, sunucuya henüz herhangi bir kaynak (proje) eklemeyin. Sunucu konumundaki sunucuya çift tıklayın. "Tomcat kurulumunu kullan" ı seçin. Tomcat dağıtım dizinine "Dağıtım yolu" nu değiştirin (Örn: c: \ server \ Tomcat 7.0.14 \ webapps). "Yayın bölümünü" genişletin. "Bir derleme olayından sonra otomatik olarak yayınla" seçeneğini işaretleyin. Kaydet ve kapat. Tutulma menüsünden "Proje -> Otomatik olarak oluştur" seçeneğini işaretleyin. Sunucular görünümünden sunucunuza sağ tıklayın, "Ekle ve kaldır", projenizi yayınlayın.


2

Bu sadece geliştirme amaçlıysa, neden tutulan bir entegre tomcat sunucusu kullanmıyorsunuz? Sunucuları pencere-> tercihler altında yapılandırabilirsiniz. Yapılandırıldıktan sonra page.jsp adında bir jsp'niz varsa, onu sağ tıklayıp sunucuda çalıştır'ı seçebilirsiniz. Tercihler-> genel-> Web tarayıcısı altında, yerleşik tarayıcıyı veya harici bir tarayıcıyı kullanmak için hava durumunu seçebilirsiniz. Tarayıcıdan jsp'nizde bazı değişiklikler yapın, kaydedin ve sayfanızı yenileyin. Tarayıcınızı kaydedip yenilediğinizde değişiklikler otomatik olarak yansıtılacaktır.


2

Burada benim için işe yarayan şey:

context.xml şuna benzer:

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

Daha sonra Eclipse'deki Sunucular sekmesinde, "Modüller" sekmesinde, konuşlandırılan tüm modüllere "Otomatik Yeniden Yükleme" seçeneğini devre dışı bıraktım.

Ayrıca, varsayılan yapılandırmanın otomatik yayınlamaya izin vermesine izin verin.

Ve Maven'i WTP ile kullanıyor, src / main / resources içeriğini içinde bırakmayı unutmayın, çünkü Eclipse son derlemenin bu klasörünün içeriğini dışarıda bırakmak için ısrar ediyor.

Sadece tüm bunlarla birlikte, sıcak dağıtım kaynakları ile çalışırken tam (VM) sınıfları elde ettim !!!


1

Geliştirme ortamınızda, Tomcat sunucunuzu, geliştirdiğiniz dizinde JSP'leri aramaya yönlendirmeniz yeterlidir. Dosyayı kaydettiğiniz anda değişiklikleri görebileceksiniz.


1

Bunu, Spring Loaded JVM aracısını kullanarak geliştirme ortamımda çalıştırmayı başardım . Spring web uygulamaları geliştirirken, bu projenin açıklamasında bunun

bir JVM'de çalışabilecek herhangi bir bayt kodunda kullanılabilir

Aşağıdaki kurulumu kullanarak, ekli bir Tomcat örneğine (olağan Eclipse WTP yöntemi) otomatik olarak yayınlanacak değişiklikleri alabildim. Eclipse Mars.2 (4.5.2) tabanlı Spring Tool Suite 3.7.3 kullanıyorum.

  1. Github projelerinden Spring Loaded'ın en son sürümünü indirin . Bu, springloaded-1.2.5.RELEASE.jar ile test edilmiştir.
  2. Eclipse'de normal olarak bir Tomcat Sunucusu kurun (Tomcat 8.0.30 ile test edilmiştir)
  3. Eclipse'de Tomcat Sunucusunun yapılandırma sayfasını açın ("Sunucular" sekmesindeki sunucu örneğine çift tıklayın).
  4. "Sunucu Seçenekleri" bölümünde, "Modüller varsayılan olarak otomatik yeniden yükle" seçeneğinin işaretini kaldırın.
    • Not: Sunucuya zaten eklenmiş web modülleriniz varsa, "Modüller" sekmesi (yapılandırma sayfası penceresinin altında) aracılığıyla bunlar üzerinde "Otomatik Yeniden Yükleme" yi tek tek devre dışı bırakmanız gerekebilir.
  5. "Genel Bilgiler" bölümünde, "Başlatma yapılandırmasını aç" ı tıklayın
    • "Bağımsız Değişkenler" sekmesinde, "Sanal Makine bağımsız değişkenlerinin" sonuna aşağıdakileri ekleyin: -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Proje .classdosyalarına ek olarak JAR'ların izlenmesini sağlamak için , bu sayının yorumlarına-Dspringloaded=watchJars= göre VM bağımsız değişkenini yapılandırın .

Sunucuyu başlatın ve her zamanki gibi Dinamik Web Uygulaması projelerini yayınlayın. Bunu yine Spring web uygulamalarıyla test edebildim. Örneğin, @Controller sınıflarında kod değiştirme, ekleme / çıkarma yöntemleri vb., Dosyayı kaydettikten ve Eclipse değiştirilen sınıfı oluşturup yayınladıktan hemen sonra uygulandı. Son olarak, Spring Loaded projesinin SSS bölümü, bazı şeylerin yeniden yüklenmeyeceği birkaç durumdan bahsetti, bu nedenle bunlar, sunucunun / uygulamanın yeniden başlatılmasını gerektirecek. Ancak bu istisnalar çok daha az sıklıkta.

Bir not daha: Bu, STS ile birlikte gelen gömülü Pivotal tc Sunucusu veya VMware vFabric tc Sunucusu ile ÇALIŞMAZ. Bu sunucular için, "Java Aracısı tabanlı yeniden yüklemeyi etkinleştir (deneysel)" seçeneği vardır, ancak bu benim için çalışmayan Spring Loaded'ın eski 1.2.0 sürümünü kullanır.


Görünüşe göre kabul etmelisin Spring, Non SpringBaşvuru nasıl olur
Tangoo

SpringLoaded JAR'ın Tomcat için yapılandırılmasına ihtiyacınız olsa da, çalışan uygulamaların kendilerinin Spring uygulamaları olması (herhangi bir Spring JAR içermesi YOKTUR) gerekmez. Bunu basit, tek bir HelloWorld Servlet ile başarıyla test ettim.
martian111

0

Jetty'yi geliştirme amacıyla kullanmaya açık mısınız?

Öyleyse, Maven ile kullanmak oldukça basit - sadece çalıştırın mvn jetty:run


0

Bu en iyi yol olmayabilir, ama benim için çalışıyor.

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *. jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / proje-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc (jar dosyasını $ contextPath içindeki lib dizinine vermelidir)
  • $ eclipseWorkbench / proje-jsp /

Jsp projemdeki değişiklikleri $ contextPath'e eşitlemek için bir rsync komutu kullanıyorum.

Eclipse for Tomcat'te, kodun sınırlı şekilde değiştirilebilmesine olanak tanıyan uzaktan hata ayıklamayı kullanın. Statik alanları değiştirirseniz veya yöntemler eklerseniz, jar dosyasını dışa aktarmanız ve bağlamı yeniden başlatmanız gerekir.


0

aşağıdaki seçeneği kullanabilir miyiz? Eclipse'de Sunucu'ya çift tıklayın -> Sunucu Konumları -> tomcat kurulumunu kullanın. Tomcat kurulumunun kontrolünü ele alır. Java sınıflarındaki değişiklikler için sunucuyu yeniden başlatmanıza gerek yoktur.


0

En basit bir yol buldum: sembolik bağlantıların kullanımı: Sanırım bu en hızlı yol çünkü hiç senkronizasyon yok: tomcat dizini ve proje dizininiz her zaman aynı dizin olacak.

Tomcat periyodik olarak değişiklikleri tespit edecek ve uygulamanızı yeniden konuşlandıracaktır.

Uygulamanızda hata ayıklamanın bir yolu da var, bu yüzden alçakgönüllülükle iyi bir çözüm olduğunu düşünüyorum.

İlgilenen herkes için çözümümü burada belgeledim .


localhost kullandığından neden uzak java uygulamasını kullanmaya ihtiyaç olduğunu anlayabilir miyim, yani kendi yerel makinemi kullanarak hata
Karen Goh

0

Aceleniz varsa:

  1. tutulmada tomcat (diğer kapsayıcı) içinde "asla otomatik olarak yayınlama" seçeneğini işaretleyin.
  2. Tomcat'i (diğer kapsayıcı) hata ayıklama modunda başlatın.

voila! :)


0

Eclipse'de, üst menüden Proje'ye tıklayın ve "Otomatik Olarak Oluştur" seçeneğinin seçili olduğundan emin olun. Bu benim sorunumu çözdü. Eclipse'i çalışma alanı meta verilerimi kullanarak Tomcat ile çalıştırıyordum. Ayrıca Maven'i Dinamik Web Modülü projesinde çalıştırıyordum. Doğrulamak için uygulamanızı Tomcat'e ekleyin. Tomcat'i Eclipse'in içinden başlatın. Uygulamanızın dağıtıldığından ve çalıştığından emin olun. Eclipse'de Konsol sekmesini açın. Başvurunuzda bir değişiklik yapın. Birkaç saniye sonra değişikliğinizin otomatik olarak oluşturulduğunu ve Tomcat'e dağıtıldığını görmelisiniz.


-2

En basit, en hızlı: Eclipse'i oluşturduğunuzda bir WAR dosyası oluşturacak şekilde ayarlayın; derleme sonrası bir adım olarak, bu WAR dosyasını tomcat webapps dizininize kopyalayın. Tomcat değişikliği tanıyacak ve herhangi bir dağıtım gerekmeden siteyi yenileyecektir. Bunun mükemmel olmadığını unutmayın; Tomcat web uygulamasını "altından" yeniden başlattığından, bu web uygulamasını kullanan kullanıcılar optimumdan daha az bir deneyime sahip olabilir; ama bu isteğinize uyuyor.


1
tamam ... sanırım niyetimi netleştirmedim. Uygulamayı bazı kullanıcılara dağıtmakla gerçekten ilgilenmiyorum, ancak günlük geliştirme ihtiyaçlarım için tutulmalı bir tomcat çalıştırmaya ve (Yap) yerine (Değişiklik yap) -> (Sonucu Gör) geri bildirim döngüsünü kısaltmaya çalışıyorum. Değiştir) -> Dağıt -> (Sonucu Gör)
udit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.