Подтвердить что ты не робот

Как обнаружить, что код работает внутри Eclipse IDE

Как обнаружить, что код работает внутри Eclipse IDE

4b9b3361

Ответ 1

Я не знаю об общем способе получения такой информации.

Одно предложение:

Когда вы запускаете Java-программу (или веб-сервер) внутри Tomcat, просто добавьте аргумент, который укажет, что эта программа запускается Eclipse.

Вы можете сделать это, открыв "Открыть диалог запуска" (меню "Выполнить" ), затем выберите свой тип приложения и добавьте вкладку "Аргументы" a -DrunInEclipse=true.

В вашем Java-коде вы можете проверить значение свойства:

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

Таким образом, если программа не запущена внутри Eclipse (или, к сожалению, если вы забыли установить свойство), свойство будет null, а затем логическое inEclipse будет равно false.

Ответ 2

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
}

Ответ 3

На самом деле код не запускается внутри Eclipse, но в отдельном Java-процессе, запущенном Eclipse, и по умолчанию Eclipse ничего не делает, чтобы сделать его другим, чем любой другой вызов вашей программы.

Это то, что вы хотите знать, если ваша программа запускается под отладчиком? Если это так, вы не можете сказать наверняка. Однако вы можете проверить аргументы, используемые для вызова вашей программы, и посмотреть, есть ли там что-то, что вам не нравится.

Ответ 4

Если ваше рабочее пространство соответствует некоторому шаблону, например, "/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;
}

Ответ 5

Более общий и точный способ, который можно использовать в любой среде IDE, будет иметь следующий цикл:

ManagementFactory.getRuntimeMXBean().getInputArguments()

ищет "-Xdebug" || (начиная с) "-agentlib: jdwp =".

Я пришел с этим из комментария @saugata здесь.

Это отлично, если вы хотите бросить условное исключение, чтобы приложение просто не выходило. Используйте логическое выражение типа "ideWait" и добавьте его в выражения для просмотра Eclipse как ideWait = false, поэтому всякий раз, когда вы останавливаетесь при этом броске, и "переходите к кадру", вы можете продолжать успешно отлаживать (я имею в виду это!)

Ответ 6

Я не думаю, что есть способ сделать это. Но я бы предложил только аргумент командной строки, например "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
}

Таким образом вы также можете получить свой дополнительный код для запуска, когда хотите, просто указав параметр debug, но при нормальных условиях он никогда не будет выполнен.

Ответ 7

Это может сработать, если ваш альтернативный рабочий процесс выполнения предоставляет другой набор зависимостей:

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

Ответ 8

Вы можете обнаружить, находитесь ли вы в JAR или нет, согласно Можете ли вы рассказать во время выполнения, если вы используете java изнутри jar?

Eclipse запустит ваше приложение из каталога classes/, тогда как большинство ваших конечных пользователей будут запускать приложение из JAR.

Ответ 9

Следующее должно работать.

Хотя я согласен с тем, что наличие кода, определяющего единую среду IDE как dev env, не является оптимальным решением. Лучше использовать флаг во время выполнения.

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

Ответ 10

Вы можете попробовать что-то вроде этого:

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