如何检测代码在eclipse IDE中运行
如何检测代码在eclipse IDE中运行
我不知道获取此类信息的通用方法。
一个建议:
当您在Tomcat中启动Java程序(或Web服务器)时,只需添加一个参数即可指示此程序是由Eclipse启动的。
您可以通过打开“打开运行对话框”(“运行”菜单),然后选择您的应用程序类型并在“参数”选项卡中添加-DrunInEclipse=true
。
在Java代码中,您可以检查属性的值:
String inEclipseStr = System.getProperty("runInEclipse"); boolean inEclipse = "true".equalsIgnoreCase(inEclipseStr);
这样,如果程序没有在Eclipse中运行(或者不幸的是,如果你忘了设置属性),那么属性将为null
,然后boolean inEclipse
将等于false。
1)创建一个帮助方法,如:
public boolean isDevelopmentEnvironment() { boolean isEclipse = true; if (System.getenv("eclipse42") == null) { isEclipse = false; } return isEclipse; }
2)在启动配置中添加环境变量:
3)用法示例:
if (isDevelopmentEnvironment()) { // Do bla_yada_bla because the IDE launched this app }
实际上代码不是在Eclipse中运行,而是在Eclipse启动的单独Java进程中运行,并且默认情况下,Eclipse没有做任何事情使它与程序的任何其他调用有任何不同。
如果你的程序是在调试器下运行的话,你想知道的吗? 如果是这样,你不能肯定地说。 但是,您可以检查用于调用程序的参数,看看是否有任何您不喜欢的内容。
如果您的工作区与“/ home / user / workspace / Project”之类的模式匹配,则可以使用以下代码:
Boolean desenv = null; boolean isDevelopment() { if (desenv != null) return desenv; try { desenv = new File(".").getCanonicalPath().contains("workspace"); } catch (IOException e) { e.printStackTrace(); } return desenv; }
可以在任何IDE上使用的更通用和精确的方法是循环:
ManagementFactory.getRuntimeMXBean().getInputArguments()
寻找“-Xdebug”|| (以)开头“-agentlib:jdwp =”。
我来自@saugata的评论。
如果您想抛出一个条件exception来阻止应用程序退出,那么这非常好。 使用类似“ideWait”的布尔值并将其作为ideWait = false添加到Eclipse监视表达式中,因此无论何时停止该抛出,并“逐帧”,您都可以继续快速调试(我的意思是!)
以下应该有效。
虽然我同意将代码检测到单个IDE作为开发环境并不是最佳解决方案。 在运行时使用标志更好。
public static boolean isEclipse() { boolean isEclipse = System.getProperty("java.class.path").toLowerCase().contains("eclipse"); return isEclipse; }
我认为没有办法做到这一点。 但我建议只是一个命令行参数,如’debug’。 然后在你的主要方法中做
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 }
这样,您也可以通过指定调试参数来获取额外的代码,但在正常情况下它将永远不会执行。
如果您的备用执行工作流提供了一组不同的依赖项,那么这可能会有效:
boolean isRunningInEclipe = false; try { Workbench.getInstance(); isRunningInEclipe = true; } catch (NoClassDefFoundError error) { //not running in Eclipse that would provide the Workbench class }
你可以检测你是否在JAR中, 你可以在运行时告诉你是否在jar中运行java?
Eclipse将从classes/
dir运行您的应用程序,而大多数最终用户将从JAR运行应用程序。
你可以尝试这样的事情:
if (ClassLoader.getSystemResource("org/eclipse/jdt/core/BindingKey.class")!=null){ System.out.println("Running within Eclipse!!!"); } else { System.out.println("Running outside Eclipse!!!"); }