2010-03-18 12 views
23

अंदर चल रहा है कैसे है कि कोड ग्रहण आईडीईकैसे है कि कोड ग्रहण आईडीई

+0

आपको और विस्तार करना होगा। संदर्भ क्या है? आप क्या हासिल करने का प्रयास कर रहे हैं? –

+0

मैं ग्रहण आईडीई –

+1

के अंदर चलने के मामले में कुछ अतिरिक्त कोड निष्पादित करना चाहता हूं अतिरिक्त कोड? –

उत्तर

20

अंदर चल रहा है मैं एक सामान्य तरीके इस प्रकार की जानकारी प्राप्त करने के लिए के बारे में पता नहीं कर रहा हूँ पता लगाने के लिए पता लगाने के लिए।

एक सुझाव:

जब आप बिलाव के अंदर एक जावा प्रोग्राम (या एक वेब सर्वर) शुरू करते हैं, बस एक तर्क यह संकेत मिलेगा कि कि इस कार्यक्रम ग्रहण द्वारा शुरू की है जोड़ें।

आप "ओपन रन संवाद" ("रन" मेनू) खोलकर ऐसा कर सकते हैं, फिर अपने प्रकार के एप्लिकेशन का चयन करें और "Arguments" टैब को -DrunInEclipse=true में जोड़ें। ,

String inEclipseStr = System.getProperty("runInEclipse"); 
boolean inEclipse = "true".equalsIgnoreCase(inEclipseStr); 

इस तरह अगर कार्यक्रम ग्रहण के अंदर नहीं चल रहा है (या दुर्भाग्य से यदि आप गुण सेट करने के लिए भूल गया) संपत्ति करेंगे:

अपने जावा कोड में, आप संपत्ति के मूल्य की जाँच कर सकते null और फिर बूलियन inEclipse गलत के बराबर होगा।

+0

+1 बताएं। – Thilo

+0

वास्तव में मैं सामान्य तरीके की तलाश में हूं। –

1

मुझे नहीं लगता कि ऐसा करने का कोई तरीका है। लेकिन मैं जो सुझाव दूंगा वह सिर्फ एक कमांड लाइन तर्क है जैसे 'डीबग'। फिर अपने मुख्य विधि में सिर्फ

if (args.length > 0 && args[0].equalsIgnoreCase("debug")) { 
    // do whatever extra work you require here or set a flag for the rest of the code 
} 

इस तरह आप भी जब भी आप डिबग पैरामीटर specifiying द्वारा लेकिन सामान्य परिस्थितियों में यह अमल कभी नहीं होगा के तहत सिर्फ चाहते हैं चलाने के लिए अपने अतिरिक्त कोड प्राप्त कर सकते है।

2

असल में कोड ग्रहण के अंदर नहीं चलाया जा रहा है, लेकिन ग्रहण द्वारा शुरू की गई एक अलग जावा प्रक्रिया में, और ग्रहण द्वारा प्रति डिफ़ॉल्ट कुछ भी नहीं किया जा रहा है ताकि इसे आपके कार्यक्रम के किसी भी अन्य आमंत्रण से अलग किया जा सके।

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

+3

यदि डीबगर के साथ चलाया जाता है तो कुछ तर्क होंगे -agentlib: jdwp = transport = dt_socket, suspend = y, पता = localhost: 2124, जिसे प्रबंधनFactory.getRuntimeMXBean() से प्राप्त किया जा सकता है। GetInputArguments() प्राप्त करें () – saugata

+0

@ हुगाटा - ओरेकल जेवीएम i –

+0

@ थोरबोजर्न रावन एंडर्सन ... जैसे उचित तर्कों को उद्धृत करने में सक्षम नहीं है कि हम इंटरपोलेट नहीं करना चाहते हैं, उदाहरण के लिए' '* .txt.gz''? –

-2

आप कुछ इस तरह की कोशिश कर सकते हैं:

if (ClassLoader.getSystemResource("org/eclipse/jdt/core/BindingKey.class")!=null){ 
    System.out.println("Running within Eclipse!!!"); 
} else { 
    System.out.println("Running outside Eclipse!!!"); 
} 
+0

नहीं। मैं एक्लिप्स के अंदर दौड़ रहा हूं लेकिन कोड विपरीत है ... – BullyWiiPlaza

6

1) की तरह एक सहायक विधि बनाएं:

public boolean isDevelopmentEnvironment() { 
    boolean isEclipse = true; 
    if (System.getenv("eclipse42") == null) { 
     isEclipse = false; 
    } 
    return isEclipse; 
} 

2) अपने प्रक्षेपण के विन्यास के लिए एक वातावरण चर जोड़ें:

enter image description here

enter image description here

3) प्रयोग उदाहरण:

if (isDevelopmentEnvironment()) { 
    // Do bla_yada_bla because the IDE launched this app 
} 
2

अपने कार्यक्षेत्र की तरह "/ घर/उपयोगकर्ता/कार्यक्षेत्र/परियोजना" कुछ नमूने का मिलान यदि आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

Boolean desenv = null; 

boolean isDevelopment() { 
    if (desenv != null) return desenv; 

    try { 
     desenv = new File(".").getCanonicalPath().contains("workspace"); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return desenv; 
} 
2

एक अधिक सामान्य और सटीक तरीका यह है कि किसी भी आईडीई पर इस्तेमाल किया जा सकता पर पाश होगा:

ManagementFactory.getRuntimeMXBean().getInputArguments()

की तलाश में "-Xdebug" || (के साथ शुरू) "-agentlib: jdwp ="।

मैं @Sugata टिप्पणी here से इसके साथ आया था।

यह उत्कृष्ट है यदि आप एक सशर्त अपवाद फेंकना चाहते हैं जो एप्लिकेशन को बाहर निकलने से रोकता है। "IdeWait" जैसे बुलियन का उपयोग करें और इसे ग्रहण घड़ी अभिव्यक्तियों में ideWait = false के रूप में जोड़ें, इसलिए जब भी आप उस फेंक पर रुकें, और "फ्रेम पर ड्रॉप करें" तो आप खुशी से डिबगिंग जारी रख सकते हैं (मेरा मतलब है!)

0

यह हो सकता है काम करता है, तो अपने विकल्प निष्पादन कार्य प्रवाह निर्भरता का एक अलग सेट प्रदान करता है:

boolean isRunningInEclipe = false; 
try { 
    Workbench.getInstance(); 
    isRunningInEclipe = true; 
} catch (NoClassDefFoundError error) { 
    //not running in Eclipse that would provide the Workbench class 
} 
0

आप पता लगा सकता है अगर आप एक जार के अंदर या नहीं कर रहे हैं के अनुसार, Can you tell on runtime if you're running java from within a jar?

ग्रहण classes/ dir से अपने अनुप्रयोग चलेगा , जबकि आपके अधिकांश अंतिम उपयोगकर्ता एक जार से ऐप चला रहे होंगे।

0

निम्नलिखित कार्य करना चाहिए।

हालांकि मैं मानता हूं कि एक ईवीई का पता लगाने वाला कोड देव env के रूप में एक इष्टतम समाधान नहीं है। रनटाइम पर ध्वज का उपयोग करना बेहतर है।

public static boolean isEclipse() { 
    boolean isEclipse = System.getProperty("java.class.path").toLowerCase().contains("eclipse"); 
    return isEclipse; 
} 
संबंधित मुद्दे