Как обнаружить, что код работает внутри Eclipse IDE - PullRequest
27 голосов
/ 18 марта 2010

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

Ответы [ 10 ]

21 голосов
/ 18 марта 2010

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

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

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

Вы можете сделать это, открыв «Open Run Dialog» (меню «Run»), затем выберите тип приложения и добавьте во вкладку «Arguments» a -DrunInEclipse=true.

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

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

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

6 голосов
/ 23 марта 2013

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
}
4 голосов
/ 11 января 2018

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

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

public static boolean isEclipse() {
    boolean isEclipse = System.getProperty("java.class.path").toLowerCase().contains("eclipse");
    return isEclipse;
}
2 голосов
/ 19 января 2016

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

ManagementFactory.getRuntimeMXBean().getInputArguments()

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

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

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

2 голосов
/ 05 октября 2013

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

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

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

1 голос
/ 18 марта 2010

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

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

0 голосов
/ 25 сентября 2017

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

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

0 голосов
/ 01 мая 2016

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

boolean isRunningInEclipe = false;
try {
    Workbench.getInstance();
    isRunningInEclipe = true;
} catch (NoClassDefFoundError error) {
    //not running in Eclipse that would provide the Workbench class
} 
0 голосов
/ 28 января 2013

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

if (ClassLoader.getSystemResource("org/eclipse/jdt/core/BindingKey.class")!=null){ 
    System.out.println("Running within Eclipse!!!"); 
} else {
    System.out.println("Running outside Eclipse!!!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...