IntelliJ ve Tomcat… değiştirilen dosyalar Tomcat tarafından otomatik olarak tanınmıyor


135

Tomcat ile Intellij Ultimate'ı çalıştırıyorum ve bir savaş açıyorum. Her şey tomcat'in webapp dizinine iyi dağıtılıyor.

Bir dosyayı xhtml dosyası gibi değiştirdiğimde, tomcat'in bu değişikliği otomatik olarak almasının bir yolu var mı? Şu an itibariyle dosyayı Intellij'den kopyalayıp tomcat web uygulaması dizininde bulunduğu dizine kopyalamam gerekiyor. Yeniden derlenmesi gereken belirli dosyalar olduğunu biliyorum, ancak xhtmls bunlardan biri değil.

Yanıtlar:


21

Ekran görüntülerini kullanarak eylem sırasını açıklayayım:

  1. Tomcat Çalıştır / Hata Ayıkla yapılandırmanızı açın (Çalıştır> Yapılandırmaları Düzenle)

resim açıklamasını buraya girin

  1. Ekle simgesini tıklayın, 'yapı' yı seçin ve ardından şunu seçin pizza_mvc:war exploded: resim açıklamasını buraya girin

  2. 'Güncelleme işleminde' ve 'Çerçevede diaktivasyonda' değişiklik yapın: resim açıklamasını buraya girin

  3. Kaynaklarınızı her yenilemek istediğinizde, <Ctrl> + F10


"Güncelleme" eylemi "ni kontrol etmemi hatırlattığınız için teşekkür ederiz
km1

290

IntelliJ IDEA ile bir savaş açarsanız bu yapılamaz. Ancak, patlamış bir savaşı konuşlandırırsanız olabilir . IDEA'da:

  1. Tomcat Çalıştır / Hata Ayıkla yapılandırmanızı açın ( Çalıştır> Yapılandırmaları Düzenle )
  2. "Dağıtım" sekmesine gidin
  3. "Sunucu Başlangıçta Dağıt" bölümünde, yapay nesneyi kaldırın (varsa) my-webapp-name:war
  4. Ekle simgesini tıklayın, 'artefakt'ı seçin ve ardından my-webapp-name:war exploded
  5. Tamam'ı tıklayın ("Dağıtmak İçin Yapıları Seçin" iletişim kutusunda)
  6. Yine de Çalıştır / Hata Ayıklama Yapılandırma Penceresinde "Sunucu" sekmesini seçin
  7. Bu sekmenin ortasında, "Çerçevede Devre Dışı Bırakma" ayarını "Kaynakları güncelle" veya "Sınıfları ve Kaynakları Güncelle" olarak değiştirin
    • Güncelleme kaynakları: Değiştirilen tüm kaynaklar (sınıflar dışındaki tüm uygulama bileşenleri) güncellenir.
    • Sınıfları ve kaynakları güncelleme: Değiştirilen tüm kaynaklar güncellenecektir; değiştirilen sınıflar yeniden derlenecek. Gerçek sınıfların güncellenip güncellenmeyeceğini yeteneklerin web sunucusuna bağlı olduğunu unutmayın. Hatırlıyorum, Tomcat html / xhtml ve jsp dosyalarını yeniden yükleyecek, ancak JSP'lerin veya Servlet'lerin kullandığı Servlet'leri veya sınıfları yeniden yüklemeyecektir. Bunun için dinamik bir sınıf yükleyici kullanmak için Tomcat'i değiştirmeniz gerekir.
  8. " Açık" güncellemesini de ayarlayabilirsiniz " eylemini yukarıda seçilene .
    • Bu, Güncelleme Güncelleme simgesisimgesine (veya Ctrl+F10 , Çalıştır penceresindeki ) .
    • "İletişim kutusunu göster", güncelleme simgesine her bastığınızda IDEA'nın sizi isteyip istemediğini belirler
  9. Tamam'ı tıklayın.

Şimdi her değişiklik yaptığınızda, IDEA, IDEA'nın çerçevesi devre dışı bırakıldığında (yani odağı kaybettiğinde) değiştirilen dosyaları yeniden dağıtacaktır. Bir iki saniye sürer, bunu IDEA'nın alt durum çubuğunda görürsünüz. Açıkçası. yine de web tarayıcınızı yenilemeniz gerekir, böylece yeni dosyayı getirir (elbette sayfada ajax gibi bir otomatik yenilemeye sahip değilse).

Tomcat ile iyi bir kombinasyon, "Çerçeve üzerinde devre dışı bırakma" yı "Kaynakları Güncelle" ve "Açık" güncelleme "eylemini" Yeniden Dağıt "veya" Sunucuyu Yeniden Başlat "olarak ayarlamaktır. dersi 'güncelleme' eylemiyle güncellendi.

ZeroTurnaround satar adında bir şirket JRebel dinamik classloader çözümdür. Ayrıca konuyla ilgili çok iyi bir beş bölüm dizisi var.


Hata var: Error: Artifact 'my-webapp-name:war exploded' has invalid extensionnasıl düzeltilir?
Anton Dozortsev

3
Ayrıca otomatik sınıfların yeniden yüklenmesi için DCEVM kullanmanızı tavsiye ederim. Daha sonra, uygulamayı yeniden konuşlandırmadan kaynak koduna herhangi bir değişiklik uygulamak için "Sınıfları ve kaynakları güncelle" seçeneğini kullanabilirsiniz. Bkz . Blog.jetbrains.com/idea/2013/07/… . Bu öğreticinin açıklamasına ek olarak, Tomcat Çalıştırma Yapılandırmasının Kurulum / Bağlantı - Hata Ayıklama sekmesinde JAVA_HOME'u DCEVM'nin JRE'sini gösterecek şekilde ayarlamak gerekir.
Alex Fedulov

1
@yaroslavprokipchyn - JBoss ve sahip olabileceği herhangi bir 'özel' gereksinime aşina değilim. Ama bildiğim kadarıyla aynı şekilde çalışmalı. Tomcat için IDEA, Tomcat'e webapp kök dizini olarak target / {contextName} dizinini kullanmasını söyleyen bir Tomcat (context.xml) yapılandırması oluşturur. JBOss'a özgü bilgiler için yardım kılavuzuna göz atmak isteyebilirsiniz.
Javaru

3
7. adımda, tüm eserleriniz "patlatılmış" olarak yüklenmedikçe (en azından Intellij 14'te) uygun açılır seçimleri alamazsınız.
mortensi

1
@ChiefTwoPencils - 5. Adım, Çalıştır / Hata Ayıkla yapılandırma penceresini değil, "Dağıtmak için Yapay Nesneleri Seç" iletişim kutusunda ("geçerli" olmayan) Tamam'ı tıklıyor. 5. adıma
açıklayıcı

12

Eğer güncelleme sınıfları ve kaynakların istiyorsanız çalıştırmak Tomcat içinde hata ayıklama moduna . Bu modda IntelliJ sınıfları ve kaynakları sorunsuz günceller (hot swap).

Aynı sorun var. IntelliJ projemi güncellemedi, çünkü "Çalışma modu" olarak çalıştırıyorum. Ben çalıştırdığınızda ayıklama modunda ve basın Ctrl+ F10, bu sınıfları ve kaynakları günceller.


Control-F10 benim için sorunu çözdü. Teşekkür ederim!
Jeffrey Getzin

3

Daha iyi bir yol buldum.

In Eclipse otomatik yapı, derleme + yeniden statik dosyaları var. Aslında statik dosyalar doğrudan src / main / webapp üzerinden sunulur .

In IntelliJ yerine doğrudan hizmet veren src / main / webapp , size bir kopyasını hangi hedefe oluşturulan bir klasörü vardır / ana / Webapp src da ve .. web inf / sınıfları / lib ilgili diğer bağlamı.

Hedefi yerine patlamış eser çıktısını src / main / webapp olarak koyarsanız , kaynak dosyalarınızın üzerine yazmaz ve doğrudan sunulur, vurmanız gerekmez - kaynakları güncelle / kaynakları ve sınıfları güncelle

IntelliJ'de yapmanız gereken şey

  1. patlamış eser çıktı dizinini src / main / webapp olarak değiştir resim açıklamasını buraya girin
  2. kirli sınıfları kaydetmek ve yeniden derlemek / derlemek için makro oluşturma (cmd + shift + f9) resim açıklamasını buraya girin resim açıklamasını buraya girin
  3. otomatik olarak oluşturmak ve uygulama çalışırken oluşturmak için kayıt defteri ve tercihleri ​​düzenleyin (cmd + shift + a - kayıt defteri). resim açıklamasını buraya girin resim açıklamasını buraya girin

Bundan sonra, IntelliJ dışından statik dosyaları değiştiren işleriniz varsa, IntelliJ ve Güncelleme Kaynakları'na gitmeden hemen değişiklikler görürsünüz ve bu makroyu kaydedip derleyen makrolara sahip olursunuz (Not: Derleme'ye de basabilirsiniz / Yeniden derleme: cmd + üst karakter + F9 / cmd + F9 - birden fazla açık düzenleyiciniz varsa kirli * düzenleyicilerinizin kirli olmadığını ve değişikliklerin (sınıfların) yeniden yükleneceğini görür)


Görünüşe göre kayıt defteri compiler.automake .. etkinleştirilmişse, sadece kaydet tuşuna basarak değişikliklerinizi iter.
Radu Toader

0

Bu sadece patlayan savaş klasörünü konuşlandırdığınızda, sıcak yeniden yüklemeyi etkinleştirdiğinizde ve tomcat'i hata ayıklama modunda başlattığınızda mümkündür.

Bunlar bunu başarmak için atılan adımlardır.

  1. Tomcat Çalıştır / Hata Ayıkla yapılandırmanızı açın (Çalıştır> Yapılandırmaları Düzenle)
  2. "Dağıtım" sekmesine gidin 3. "Sunucu Başlangıçta Dağıt" bölümünde, my-webapp-name: war yapısını kaldırın (varsa)
  3. Ekle simgesini tıklayın, 'yapı' yı seçin ve ardından web-web-adımı seçin: savaş patladı
  4. Tamam'ı tıklayın ("Dağıtmak İçin Yapıları Seçin" iletişim kutusunda)
  5. Yine de Çalıştır / Hata Ayıklama Yapılandırma Penceresinde "Sunucu" sekmesini seçin
  6. "Çerçevede Devre Dışı Bırakma" ve "Güncelleme İşleminde" ayarlarını "Sınıfları ve kaynakları güncelle" olarak değiştirin
  7. Uygula ve kaydet
  8. Dosya ve ardından Ayarlar'ı tıklatarak VEYA CTRL + ALT + S tuşlarına basarak normal proje ayarlarına gidin.
  9. "İnşa, Yürütme, Dağıtım"
  10. Derleyici
  11. Projeyi otomatik olarak oluştur'u seçin
  12. kayıt etmek
  13. Tomcat'i hata ayıklama modunda başlat

0

hemen görüntülemek / oynatmak istediğiniz çok bölümlü dosyalarınız varsa, doğrudan hedef klasöre yükleyin. * (yalnızca yazma konumunu hedef klasöre değiştirin / statik /)

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

IDE'nizi yeniden başlatmak zorunda kalmadan dosyanızı hemen görüntüleyebileceksiniz

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.