2013-03-07 2 views
8

मैं एक कठिन समय इस सवाल का शीर्षक लिख दिया था, लेकिन यहाँ मेरी स्थिति है और मैं क्या पूछ रहा हूँ:एप्लिकेशन के चलने के बाद जावा। क्लास फ़ाइलों की आवश्यकता है?

  • मैं परीक्षण चलाने के लिए एक जावा परियोजना है कि मैं पर चलने "चींटी परीक्षण" है
  • परीक्षणों को चलाने के लिए लगभग 10 मिनट लगते हैं
  • क्या मैं परिणामों के बिना इन परीक्षणों को चलाने के बीच में एक अलग गिट शाखा में स्विच कर सकता हूं?
  • मैं चाहता हूं कि मूल कोड के खिलाफ परीक्षण पूरा हो जाएं, और ऐसा होने पर मुझे बस एक अलग शाखा पर काम करने की अनुमति दें।

मुझे लगता है कि मेरे प्रश्न की जड़ है: क्या आवेदन लोड होने और चलाने के बाद आवश्यक क्लास फ़ाइलों की आवश्यकता है? कक्षाएं सिर्फ स्मृति में संग्रहीत हैं, और मुझे फ़ाइल सिस्टम पर फ़ाइलों की आवश्यकता नहीं है? या फिर भी यह फाइल सिस्टम पर चीजों को एक्सेस/पढ़ता है?

किसी चल रहे एप्लिकेशन के लिए जावा की आवश्यकता के बारे में कोई अंतर्दृष्टि या बेहतर समझ की सराहना की जाती है।

उत्तर

6

कक्षाएं मांग पर लोड की जाती हैं। क्लासलोडर उस वर्ग को तब तक लोड करने का प्रयास नहीं करेगा जब तक उस वर्ग का संदर्भ नहीं दिया जाता है। इसलिए, रन के बीच में क्लासपाथ से कक्षा फ़ाइलों को हटाने से लगभग निश्चित रूप से विफलताओं का कारण बन जाएगा।

+0

समझ गया, इसलिए अगर किसी तरह मुझे पता था कि सभी वर्गों को लोड किया गया था, तो शायद यह ठीक रहेगा, लेकिन यह जानने का वास्तव में एक अच्छा तरीका नहीं है, इसलिए सुरक्षित नहीं है। धन्यवाद –

3

यदि आप परीक्षण करते समय .java फ़ाइलों को गिट से उसी स्थान पर संकलित नहीं करते हैं, तो आपको .class फ़ाइलों के साथ कोई समस्या नहीं होगी - इससे कोई फर्क नहीं पड़ता कि आईडीई कैसे लोड करता है कक्षाएं।

+1

* "जब तक आप .java फ़ाइलों को संकलित नहीं करते हैं" * एक ही स्थान पर परीक्षण चल रहा है ... लेकिन विचार ध्वनि है;) – MadProgrammer

+0

अच्छा बिंदु <;)> – ddmps

+0

यह वास्तव में सहायक है। मेरा "चींटी परीक्षण" कमांड मेरे आईडीई की तुलना में एक अलग स्थान में संकलित करता है, इसलिए मैं वास्तव में .java फ़ाइलों की एक अलग शाखा को चेकआउट कर सकता हूं और चल रहे परीक्षणों के बारे में चिंता नहीं कर सकता। .class फ़ाइलों का फ़ोल्डर स्पष्ट रूप से .gitignore'd है, इसलिए यह शायद बिना किसी समस्या के काम करेगा। धन्यवाद! –

0

मानक में (मेरा मतलब है सूरज/ओरेकल) जेवीएम कक्षा के लोड होने के बाद यह जेवीएम बंद होने तक स्मृति में रहता है, लेकिन यह तब तक लोड नहीं किया जा सकता है जब कक्षाएं मांग पर लोड होती हैं।

0

यदि सभी फाइलों को स्मृति में लोड किया गया है तो इसकी आवश्यकता नहीं होगी ... लेकिन फिर आप कैसे सुनिश्चित कर सकते हैं कि सभी वर्गों को स्मृति में लोड किया गया है ... इसलिए आपको क्लासपाथ

में क्लास फाइलों की आवश्यकता होगी
0

ठीक है मुझे लगता है कि आपको पीछे एक कदम करना है और समाधान पर पुनर्विचार करना है।

आपने लिखा है कि आप एकीकरण परीक्षण निष्पादित करते हैं। और परीक्षण के एक हिस्से के रूप में आप स्रोतों को स्विच कर रहे हैं, जिनका परीक्षण किया जाता है। यदि आप ऐसा करते हैं, तो आप बेकार परीक्षण डेटा तैयार करेंगे, क्योंकि आप निश्चित नहीं हो सकते हैं, वास्तव में क्या निष्पादित किया गया था।

यदि आप अपने सॉफ्टवेयर के दो अलग-अलग संस्करण/शाखाओं का परीक्षण करना चाहते हैं, तो बस दो टेस्ट रन सक्षम करें और परिणामों की तुलना करें।

आप केवल यह सुनिश्चित कर सकते हैं कि एक * .class फ़ाइल लोड हो गई है, अगर आपने इसका उपयोग किया है। कक्षा फ़ाइल लॉउड करने के बाद, यह जेवीएम की स्मृति में रहता है। हो सकता है कि यह कुछ समय के लिए अप्रयुक्त हो और जीईएम-स्पेस कम हो जाए (लेकिन मुझे ऐसा नहीं लगता)।

+0

उत्तर के लिए धन्यवाद। मैं एक ही समय में दोनों शाखाओं का परीक्षण करने की कोशिश नहीं कर रहा हूं। मैं बस एक शाखा का परीक्षण करने की कोशिश कर रहा हूं, और कुछ और काम करता हूं। मैं परीक्षण मूल शाखा के कोड के साथ पूरा करना चाहता हूँ। –

+0

हडसन या जेकिन आज़माएं। अपने कार्यक्षेत्र में एकीकरण परीक्षण न करें। –

+0

हम बांस का उपयोग करते हैं, लेकिन मैं आमतौर पर धक्का देने से पहले परीक्षण चलाने की कोशिश करता हूं ताकि मुझे पता चले कि मैं अन्य डेवलपर्स के लिए निर्माण को तोड़ नहीं दूंगा। –

संबंधित मुद्दे