Java 如何检测代码在EclipseIDE中运行
如何检测EclipseIDE中运行的代码我不知道获取此类信息的一般方法 一项建议: 当您在Tomcat中启动Java程序(或web服务器)时,只需添加一个参数,指示此程序是由Eclipse启动的 您可以通过打开“打开运行对话框”(“运行”菜单)来实现这一点,然后选择您的应用程序类型并添加到“参数”选项卡aJava 如何检测代码在EclipseIDE中运行,java,ide,Java,Ide,如何检测EclipseIDE中运行的代码我不知道获取此类信息的一般方法 一项建议: 当您在Tomcat中启动Java程序(或web服务器)时,只需添加一个参数,指示此程序是由Eclipse启动的 您可以通过打开“打开运行对话框”(“运行”菜单)来实现这一点,然后选择您的应用程序类型并添加到“参数”选项卡a-DrunInEclipse=true 在Java代码中,可以检查属性的值: String inEclipseStr = System.getProperty("runInEclipse");
-DrunInEclipse=true
在Java代码中,可以检查属性的值:
String inEclipseStr = System.getProperty("runInEclipse");
boolean inEclipse = "true".equalsIgnoreCase(inEclipseStr);
这样,如果程序没有在Eclipse中运行(或者不幸的是,如果您忘记设置属性),那么属性将为
null
,然后布尔值inEclipse
将等于false。我认为没有任何方法可以做到这一点。但我建议的只是一个命令行参数,比如“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
}
通过这种方式,您还可以随时运行额外的代码,只需指定调试参数,但在正常情况下它将永远不会执行。实际上,代码不是在Eclipse内部运行的,而是在Eclipse启动的单独Java进程中运行的,默认情况下,Eclipse没有做任何事情使其与程序的任何其他调用有所不同
如果您的程序是在调试器下运行的,您想知道的是什么?如果是的话,你不能肯定。但是,您可以检查用于调用程序的参数,看看其中是否有您不喜欢的内容。您可以尝试以下方法:
if (ClassLoader.getSystemResource("org/eclipse/jdt/core/BindingKey.class")!=null){
System.out.println("Running within Eclipse!!!");
} else {
System.out.println("Running outside Eclipse!!!");
}
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
}
如果您的工作区匹配某种模式,如“/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评论中得到这个的
如果您想抛出一个条件异常来阻止应用程序简单地退出,这是非常好的。使用像“ideWait”这样的布尔值,并将其作为ideWait=false添加到Eclipse watch表达式中,这样,每当您停止该抛出并“放到帧”时,您就可以愉快地继续调试(我是说!)如果您的替代执行工作流提供了一组不同的依赖项,那么这可能会起作用:
boolean isRunningInEclipe = false;
try {
Workbench.getInstance();
isRunningInEclipe = true;
} catch (NoClassDefFoundError error) {
//not running in Eclipse that would provide the Workbench class
}
你可以检测你是否在罐子里,根据
Eclipse将从
classes/
dir运行您的应用程序,而您的大多数最终用户将从JAR运行应用程序。以下操作应该可以运行
尽管我同意让代码检测单个IDE作为开发环境并不是一个最佳的解决方案。在运行时使用标志更好
public static boolean isEclipse() {
boolean isEclipse = System.getProperty("java.class.path").toLowerCase().contains("eclipse");
return isEclipse;
}
你必须详细说明。背景是什么?你想实现什么?我想执行一些额外的代码,以防它在EclipseIdeWarning中运行!发现不良行为!实际上,我正在寻找通用的方法。如果使用调试器运行,则会有一些类似于-agentlib:jdwp=transport=dt_socket、suspend=y、address=localhost:2124的参数,可以从ManagementFactory.getRuntimeMXBean().getInputArguments().get()获得@saugata-使用Oracle JVMi@ThorbjørnRavnAndersen…例如无法正确引用我们不希望插入的参数,例如,
“*.txt.gz”
?@PierreD我不理解你的评论。@ThorbjørnRavnAndersen我指的是你答案的最后一句话:“但是,您可以检查用于调用程序的参数,并查看其中是否有您不喜欢的内容”。这正是让我想到这个问题的原因:如果我想逐字传递字符串“*”
或“*.ext”
(不带双引号)作为命令行参数,我可以从shell中编写“*”
。但是我不能从Eclipse调试器中这样做,因为它会留下引号。因此,在这种情况下,并且仅在这种情况下,我们需要执行一些参数清理。