2010-03-18 52 views

回答

20

我不知道通用的方式來獲取這種信息。

一個建議:

當您啓動Tomcat的內部Java程序(或Web服務器),只需添加一個參數,這將表明,這種程序是由Eclipse的啓動。

您可以通過打開「打開運行對話框」(「運行」菜單),然後選擇您的應用程序類型並在「參數」選項卡中添加一個-DrunInEclipse=true

在Java代碼中,你可以檢查屬性的值:

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

這樣,如果程序沒有在Eclipse中運行(或者不幸的是,如果你忘了設置該屬性),該屬性將是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

其實代碼不被在Eclipse中運行,但在通過啓動Eclipse獨立的Java進程,並有每默認沒有通過Eclipse的工作讓比你的程序的任何其他調用任何不同。

是你想知道的東西,如果你的程序正在調試器下運行?如果是這樣,你不能肯定地說。你可以,但是,檢查用於調用你的程序的參數,看看是否存在有什麼你不喜歡的。

+3

如果使用調試器運行,將會有一些類似於-agentlib的參數:jdwp = transport = dt_socket,suspend = y,address = localhost:2124,可以從ManagementFactory.getRuntimeMXBean()。getInputArguments()。get() – saugata

+0

@saugata - 與Oracle JVM i –

+0

@ThorbjørnRavnAndersen...如不能正確引用我們不想插入的參數,例如''* .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

沒有。我在Eclipse中運行,但代碼輸出相反... – 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

如果您的工作區的一些模式相匹配,如 「/ home/user中/工作區/工程」,你可以使用下面的代碼:

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

一個更通用的,精確的方法,可以在任何IDE使用將在在Loop:

ManagementFactory.getRuntimeMXBean().getInputArguments()

尋找「-Xdebug」|| (以「-agentlib:jdwp =」開頭)。

我來自@saugata評論here

這是非常好的,如果你想拋出一個條件異常,防止應用程序退出。使用像「ideWait」這樣的布爾值,並將其作爲ideWait = false添加到Eclipse監視表達式中,因此,無論何時停止在該擲時,都可以繼續進行調試(我的意思是!)

0

這可能工作,如果你選擇的執行工作流程提供了一組不同的依賴關係:

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

以下應該工作。

儘管我同意將代碼檢測爲單個IDE作爲開發環境並不是最佳解決方案。在運行時使用標誌更好。

public static boolean isEclipse() { 
    boolean isEclipse = System.getProperty("java.class.path").toLowerCase().contains("eclipse"); 
    return isEclipse; 
} 
相關問題