Как определить, было ли мое приложение запущено из IntelliJ? - PullRequest
5 голосов
/ 07 декабря 2011

Я могу запустить свое приложение как отдельное приложение (например, из командной строки) или одним конкретным способом - оно напрямую «из» исходного кода, то есть с использованием IntelliJ.

Есть ли способ обнаружить, еслиприложение было запущено с IntelliJ или нет?Только это, двоичное решение.

Обходных путей достаточно, добавляя дополнительную опцию при запуске, однако я ищу прямое решение, подобное этому для C # Как узнать, что приложение запускается отладчиком(VisualStudio) C #

Решение может быть действительным для любой IDE, но должно быть действительным по крайней мере для IntelliJ.

Небольшое обновление

Для тех(включая меня), ищущий готовый к использованию код ( Scala code ):

object ProgramInfo
{
  val isStandaloneApp = sun.management.ManagementFactory.getRuntimeMXBean().getInputArguments.isEmpty
  val isDebugMode = scala.collection.JavaConversions.iterableAsScalaIterable(sun.management.ManagementFactory.getRuntimeMXBean().getInputArguments).exists(it => it.startsWith("-agentlib"))
}

Это не будет работать в сложных случаях, но если вы не передадите тонну параметров в JVM, это просто отлично.

Ответы [ 4 ]

8 голосов
/ 07 декабря 2011

Я использовал ниже в прошлом, чтобы проверить настройки отладки.Вы могли бы использовать что-то подобное

ManagementFactory.getRuntimeMXBean().getInputArguments()

enter image description here

2 голосов
/ 07 декабря 2011

Когда я запускаю приложение в IDEA, оно устанавливает некоторые переменные, такие как -Didea.launcher.port и -Didea.launcher.bin.path.Может быть, вы могли бы проверить, установлены они или нет.

1 голос
/ 07 декабря 2011

Вы не можете сделать это общим способом, потому что Intellij запускает Java-приложение точно так же, как вы это делаете из командной строки. Ну, не совсем то же самое, но на различия нельзя рассчитывать.

  1. Вы можете определить из своего приложения, подключен ли отладчик (см. Ответ Амирса), но это не обязательно Intellij, это может быть что-то вроде jvisualvm. Это то же ограничение, что и в Visual Studio и C #, если я правильно понимаю. И если вы не запустите в режиме отладки, это не сработает.

  2. Вы всегда можете запустить в Intellij с -Dlaunchedfromintellij, как это было предложено Кристианом, но это не согласовано, и, как вы сказали, это сложно для всех приложений.

  3. Третье предложение: при запуске Intellij или Eclipse убедитесь, что для linux установлена ​​конкретная переменная окружения:

    $ LAUNCHED_FROM_IDE = что-то intellij

Тогда любые запущенные процессы из intellij унаследуют эту переменную окружения, а не из командной строки. Неважно, какое это значение, потому что вы проверяете, что оно существует.

0 голосов
/ 22 апреля 2017

Есть ли способ определить, было ли приложение запущено из IntelliJ или нет?Только это, двоичное решение.

Здесь - это решение, которое я использую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...