IntelliJ और Tomcat… परिवर्तित फ़ाइलें स्वचालित रूप से Tomcat द्वारा मान्यता प्राप्त नहीं हैं


135

मैं टॉमकैट के साथ इंटेलीज अल्टीमेट चला रहा हूं और एक युद्ध की तैनाती कर रहा हूं। सब कुछ ठीक है जो कि ट् याट की वेबएप डाइरेक्टरी को दर्शाता है।

जब मैं एक एक्सएचटीएमएल फ़ाइल की तरह एक फ़ाइल को बदलता हूं, तो क्या टॉमकैट के लिए उस परिवर्तन को स्वचालित रूप से लेने का एक तरीका है? जैसा कि अभी मुझे Intellij से फ़ाइल को कॉपी करने और इसे उस निर्देशिका में कॉपी करने की आवश्यकता है जहां यह tomcat वेब ऐप निर्देशिका में रहती है। मुझे पता है कि कुछ फाइलें हैं जिन्हें एक recompile की आवश्यकता होगी, लेकिन xhtmls उनमें से एक नहीं हैं।

जवाबों:


21

स्क्रीनशॉट का उपयोग करके मुझे क्रियाओं के अनुक्रम का वर्णन करने दें:

  1. अपना टॉमकैट रन / डिबग कॉन्फ़िगरेशन खोलें (रन> संपादन कॉन्फ़िगरेशन)

यहां छवि विवरण दर्ज करें

  1. ऐड आइकन पर क्लिक करें, 'विरूपण साक्ष्य' चुनें और फिर चुनें pizza_mvc:war exploded: यहां छवि विवरण दर्ज करें

  2. 'ऑन एक्शन एक्शन' और 'ऑन फ्रेम डायक्टेशन' को संशोधित करें: यहां छवि विवरण दर्ज करें

  3. हर बार जब आप अपने संसाधनों को ताज़ा करना चाहते हैं, तो दबाएं <Ctrl> + F10


"ऑन 'अपडेट' कार्रवाई की जांच करने के लिए मुझे याद दिलाने के लिए धन्यवाद
किमी

290

यदि आप IntelliJ IDEA के साथ युद्ध को तैनात करते हैं तो यह नहीं किया जा सकता है। हालाँकि, यह हो सकता है यदि आप एक विस्फोटित युद्ध को तैनात करें । आईडिया में:

  1. अपना टॉमकैट रन / डिबग कॉन्फ़िगरेशन खोलें ( रन> संपादन कॉन्फ़िगरेशन )
  2. "परिनियोजन" टैब पर जाएं
  3. "सर्वर स्टार्टअप पर तैनात" अनुभाग में, विरूपण साक्ष्य को हटाएं (यदि मौजूद है) my-webapp-name:war
  4. ऐड आइकन पर क्लिक करें, 'विरूपण साक्ष्य' चुनें और फिर चुनें my-webapp-name:war exploded
  5. ठीक पर क्लिक करें ("कलाकृतियों का चयन करने के लिए तैनाती" संवाद पर)
  6. रन / डीबग कॉन्फ़िगरेशन विंडो में अभी भी, "सर्वर" टैब का चयन करें
  7. उस टैब के मध्य में, "अपडेट संसाधनों" या "अपडेट क्लासेस और संसाधन" के लिए "ऑन फ्रेम डिएक्टिवेशन" सेटिंग बदलें
    • अद्यतन संसाधन: सभी परिवर्तित संसाधन (अर्थात, कक्षाओं के अलावा सभी अनुप्रयोग घटकों) को अद्यतन किया जाएगा।
    • अद्यतन कक्षाएं और संसाधन: सभी परिवर्तित संसाधन अपडेट किए जाएंगे; बदली हुई कक्षाएं फिर से शुरू की जाएंगी। ध्यान दें कि क्या वास्तविक कक्षाएं अपडेट की जाएंगी यह क्षमताओं के वेब सर्वर पर निर्भर करता है। अगर मुझे याद है, तो टॉमकैट html / xhtml और jsp फ़ाइलों को फिर से लोड करेगा, लेकिन सर्वलेट्स या क्लासेस नहीं जो JSPs या सर्वर उपयोग करते हैं। इसके लिए एक डायनामिक क्लास लोडर का उपयोग करने के लिए आपको टॉमकैट को संशोधित करना होगा।
  8. आप भी सेट कर सकते हैं " ऑन 'अपडेट ' कार्रवाई को ऊपर चयनित के रूप में ।
    • यह निर्धारित करता है कि अद्यतन हिट करते समय क्या होता है अपडेट आइकन आइकन (या Ctrl+) कोF10 रन विंडो में ) को ।
    • "शो डायलॉग" यह निर्धारित करता है कि जब आप अपडेट आइकन पर हिट करते हैं तो हर बार आईडीईए आपको संकेत देता है
  9. ओके पर क्लिक करें।

अब जब भी आप कोई बदलाव करते हैं, तो IDEA फ्रेम फ़ाइल (ओं) को तब बदल देगा जब IDEA का फ्रेम निष्क्रिय हो जाएगा (यानी फ़ोकस खो देता है)। यह एक या दो बार लेता है, आप इसे आईडीईए में निम्न स्थिति पट्टी में देखेंगे। जाहिर है। आपको अभी भी अपने वेब ब्राउज़र को रिफ्रेश करने की आवश्यकता होगी ताकि यह नई फ़ाइल लाए (जब तक कि पेज में अजाक्स की तरह ऑटो रिफ्रेश न हो)।

टॉमकैट के साथ एक अच्छा संयोजन "ऑन फ्रेम डीएक्टिवेशन" को "अपडेट रिसोर्सेज" और "ऑन 'अपडेट' एक्शन को" रेडेप्लॉय "या" रीस्टार्ट सर्वर "पर सेट करना है। इससे स्टैटिक पेजों को फ्रेम डीएक्टिवेशन के माध्यम से जल्दी से अपडेट किया जा सकता है। वर्ग 'अद्यतन' कार्रवाई के माध्यम से अद्यतन।

ZeroTurnaround नामक कंपनी JRebel बेचती है जो एक डायनेमिक क्लास लोडर समाधान है। उनके पास इस विषय पर पांच भाग श्रृंखला भी है जो बहुत अच्छी है।


मेरे पास त्रुटि है: Error: Artifact 'my-webapp-name:war exploded' has invalid extensionकैसे ठीक करें?
एंटोन डोज़ोर्टसेव

3
मैं स्वत: लोड होने वाले वर्गों के लिए DCEVM का उपयोग करने की अत्यधिक अनुशंसा करता हूं। फिर आप एप्लिकेशन को पुनः अपडेट किए बिना स्रोत कोड में कोई भी परिवर्तन लागू करने के लिए "अपडेट क्लासेस और संसाधनों" का उपयोग कर सकते हैं। देखें: blog.jetbrains.com/idea/2013/07/… । इस ट्यूटोरियल के अलावा जो यह बताता है कि सेटअप / कनेक्शन में JAVA_HOME सेट करना आवश्यक है - DCEVM के JRE को इंगित करने के लिए Tomcat Run कॉन्फ़िगरेशन के डीबग टैब।
एलेक्स फेडुलोव

1
@yaroslavprokipchyn - मैं JBoss और किसी भी 'विशेष' आवश्यकताओं से परिचित नहीं हूँ। लेकिन जहां तक ​​मुझे पता है, उसे वही काम करना चाहिए। टॉमकैट के लिए, IDEA एक Tomcat (Reference.xml) कॉन्फ़िगरेशन बनाता है जो टामकैट को वेबप रूट निर्देशिका के रूप में लक्ष्य / {संदर्भ नाम} निर्देशिका का उपयोग करने के लिए कहता है। आप किसी भी JBOss विशिष्ट जानकारी के लिए मदद गाइड की जांच करना चाहते हैं।
जावरु

3
चरण 7 में, आप (कम से कम इंटेलीज 14 में) उचित ड्रॉपडाउन-विकल्प प्राप्त नहीं करेंगे, जब तक कि आपके सभी कलाकृतियों को "विस्फोट" के रूप में लोड नहीं किया जाता है।
मोर्टेंसी

1
@ChiefTwoPencils - चरण 5 "चुनें कलाकृतियों को तैनात करने के लिए कलाकृतियों" पर ठीक क्लिक कर रहा है (जिसके लिए कोई "लागू नहीं" है), रन / डिबग कॉन्फ़िगरेशन विंडो नहीं। मैंने चरण 5 में एक स्पष्ट बयान जोड़ा।
जावरू

12

यदि आप कक्षाओं और संसाधनों को अपडेट करना चाहते हैं, तो टॉमकैट को डिबग मोड में चलाएं । इस मोड में IntelliJ एक समस्या (हॉट स्वैप) के बिना कक्षाओं और संसाधनों को अपडेट करता है।

एक ही समस्या है। IntelliJ ने मेरी परियोजना को अपडेट नहीं किया, क्योंकि मैं "रन मोड" के रूप में चलाता हूं। जब मैं डिबग मोड में चलता हूं और Ctrl+ दबाता हूं F10, तो यह कक्षाओं और संसाधनों को अपडेट करता है।


कंट्रोल-एफ 10 ने मेरे लिए समस्या तय कर दी। धन्यवाद!
जेफरी गेट्ज़िन

3

मुझे एक बेहतर तरीका मिल गया है।

में ग्रहण हम स्वचालित रूप से निर्माण, संकलन + पुनः लोड स्थिर फ़ाइलों की है। वास्तव में स्थैतिक फ़ाइलों को सीधे src / main / webapp से परोसा जाता है ।

में इंटेलीजे बजाय से सीधे की सेवा src / मुख्य / webapp , वहाँ एक फ़ोल्डर लक्ष्य में बनाया है, जिसमें आप अपने की एक प्रति है जाएगा src / मुख्य / webapp और अन्य संबंधित .. वेब-INF / वर्गों / lib संदर्भ।

यदि आप विस्फोट के विरूपण साक्ष्य के उत्पादन के बजाय src / main / webapp को आउटपुट करते हैं, तो यह आपको स्रोत फ़ाइलों को अधिलेखित नहीं करेगा, और यह सीधे सेवा देगा, आपको हिट नहीं करना होगा - संसाधनों / अद्यतन संसाधनों और कक्षाओं को अपडेट करें

तो आपको IntelliJ में क्या करने की आवश्यकता है

  1. src / main / webapp में विस्फोट विरूपण साक्ष्य आउटपुट डायरेक्टरी को संशोधित करें यहां छवि विवरण दर्ज करें
  2. गंदे वर्गों को बचाने और पुन: संकलित करने के लिए मैक्रो बनाएं (cmd + shift + f9) यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें
  3. एप्लिकेशन को स्वचालित रूप से बनाने और बनाने के लिए रजिस्ट्री और प्राथमिकताओं को संपादित करें जबकि एप्लिकेशन चल रहा है (cmd + shift + a - रजिस्ट्री)। यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

इसके बाद, यदि आपके पास इंटेलीजे के बाहर से स्थैतिक फ़ाइलों को बदलने वाली नौकरियां हैं, तो आप तुरंत इंटेलीजे और अपडेट रिसोर्सेज में जाए बिना बदलाव देखेंगे , और उन वर्गों के लिए जो आपके पास स्थूल हैं जो सहेजते हैं, और संकलित करते हैं (नोट: आप बस कंपाइल को भी हिट कर सकते हैं / पुनरावर्ती: cmd + Shift + F9 / cmd + F9 - यदि आपके पास कई खुले हुए संपादक हैं, तो आप देखेंगे कि आपके गंदे * संपादक गैर-गंदे होंगे, और परिवर्तन (कक्षाएं) फिर से लोड होंगे)


ऐसा लगता है कि यदि आपके पास रजिस्ट्री कंपाइलर है। डिपोमेके .. सक्षम है तो यह आपके परिवर्तनों को केवल हिट सेव द्वारा धक्का देता है।
रादु टोडर

0

यह केवल तभी संभव है जब आप विस्फोट किए गए युद्ध फ़ोल्डर को तैनात करते हैं, गर्म पुनः लोड करने में सक्षम होते हैं और डिबग मोड में टॉमकैट शुरू करते हैं।

इसे प्राप्त करने के लिए ये चरण हैं।

  1. अपना टॉमकैट रन / डिबग कॉन्फ़िगरेशन खोलें (रन> संपादन कॉन्फ़िगरेशन)
  2. "परिनियोजन" टैब पर जाएं 3. "सर्वर स्टार्टअप पर नियोजित करें" अनुभाग में, (यदि मौजूद हो तो) मेरे वेब-वेब-नाम: युद्ध को हटा दें
  3. ऐड आइकन पर क्लिक करें, 'विरूपण साक्ष्य' चुनें और फिर मेरा वेब-नाम चुनें: युद्ध विस्फोट
  4. ठीक पर क्लिक करें ("कलाकृतियों का चयन करने के लिए तैनाती" संवाद पर)
  5. रन / डीबग कॉन्फ़िगरेशन विंडो में अभी भी, "सर्वर" टैब का चयन करें
  6. "ऑन फ्रेम डिएक्टिवेशन" और "अपडेट एक्शन" सेटिंग्स को "अपडेट क्लासेस और रिसोर्स" में बदलें।
  7. लागू करें और सहेजें
  8. फ़ाइल पर क्लिक करके सेटिंग्स या फिर CTRL + ALT + S दबाकर सामान्य प्रोजेक्ट सेटिंग्स पर जाएं
  9. गोटो "निर्माण, निष्पादन, परिनियोजन"
  10. संकलक
  11. स्वचालित रूप से बिल्ड प्रोजेक्ट का चयन करें
  12. सहेजें
  13. डिबग मोड में टॉमकैट शुरू करें

0

यदि आपके पास मल्टीपार्टफ़ाइल्स हैं, जिसे आप तुरंत देखना / खेलना चाहते हैं, तो सीधे टारगेट फ़ोल्डर में अपलोड करें। * (केवल लिखने के स्थान को लक्ष्य फ़ोल्डर में बदलें / स्थिर /)

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

आप अपनी आईडीई को पुनः आरंभ किए बिना अपनी फ़ाइल को तुरंत देख पाएंगे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.