【问题标题】:Java Programmatically Detect Eclipse/debuggerJava 以编程方式检测 Eclipse/调试器
【发布时间】:2017-02-20 16:22:57
【问题描述】:

我正在使用 Eclipse 编写我的 Java 应用程序。

是否可以通过编程方式检测代码是从 Eclipse 调试环境 (F11) 执行,还是使用“java -jar”在没有 Eclipse 的情况下执行代码。

我知道在Visual Studio中可以检测Visual Studio是否执行,但是我这里写的不是.Net应用,而是Eclipse下的Java。

【问题讨论】:

  • 你想达到什么目的?
  • 也许这会有所帮助:stackoverflow.com/questions/3776204/…
  • 一种选择是只使用 Java 属性,或者只是环境变量,然后在运行时在 Eclipse 中设置它。无论如何,这可能比尝试检测特定的开发环境要好得多,并且即使在 Eclipse 下也可以正常运行应用程序而无需修改代码。
  • @ScaryWombat 总体目标是最终实现修订增量,因为 Eclipse 本身并不提供此功能,但我有此代码的其他用途,例如非 Eclipse 不具备的调试功能.由于多种原因,此代码非常方便。

标签: java eclipse debugging


【解决方案1】:

过去,我通过检查是否可以找到 .project 文件来查看我的软件是否在 Eclipse 中运行。

public static boolean isRunningInEclipse(int folderDepth) {
    File projectRoot = new File(Boot.class.getProtectionDomain().getCodeSource().getLocation().getFile());       
    for (int i = 0; i < folderDepth; i++) {
        projectRoot = projectRoot.getParentFile();
        if (projectRoot == null || !projectRoot.isDirectory()) {
            return false;
        }
    }
    return new File(projectRoot, ".project").isFile();
}

如果您的主类位于 bin 文件夹中,则使用 folderDepth = 1 调用该方法,如果您的主类位于 target/classes/ 中,则使用 folderDepth = 2 调用它。

如果你特别想知道它是否在调试器中运行,我建议你检查this answer

【讨论】:

  • 不错的技巧。请注意,您可能需要进行更多检查以涵盖 bintarget/classesWEB-INF/classes 中的类文件,但想法是相同的。
  • @AngerClown 感谢您的称赞!没错,我的代码示例假设类位于 target/classes/ 文件夹中。我会将此添加到我的答案中。
  • false == 应该是 !。但是exists 测试已经过时,最终的isFile 测试意味着它的父级存在。此外,.toString() 已过时。所以整个测试可以融合到return oFile!=null &amp;&amp; new File(oFile, ".project").isFile();
  • @Holger 你是对的。我删除了 Sarah 的编辑,并使我自己的代码示例更加通用。
猜你喜欢
  • 2010-10-13
  • 2011-10-16
  • 2017-06-09
  • 1970-01-01
  • 2023-04-06
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多