Пока что ни один из ответов не является правильным, и это первый случай, который появляется в Google, если вы запросите указанную ошибку, поэтому я чувствую, что некоторые пояснения необходимы.
JVMTI и JDWP выполняют совместную работу, фактически они обычно должны использоваться вместе. Вы получите ERROR: JDWP unable to get necessary JVMTI capabilities
, если -Xrunjdwp
(и / или, возможно, -agentlib:jdwp
) указано более одного раза в командной строке. Чтобы исправить это, убедитесь, что у вас есть только один из -Xrunjdwp
или -agentlib:jdwp
в командной строке.
Подробнее читайте в ...
JVMTI (интерфейс инструмента виртуальной машины Java) является преемником JVMDI (интерфейс отладки виртуальной машины Java) и JVMPI (интерфейс профилирования виртуальной машины Java). Он включает в себя функциональность как JVMDI, так и JVMPI, которые устарели в Java 5 и удалены в Java 6. Это API, который предоставляет внутреннюю часть JVM для целей отладки и профилирования.
JDWP (Java Debug Wire Protocol) - это протокол, описывающий простой механизм передачи команд и ответов. Насколько я знаю, это единственный способ для отладчика, сидящего вне JVM, общаться с ним и взаимодействовать с JVMTI.
JDI (Java Debugger Interface) - это API на стороне клиента (на стороне отладчика), который раскрывает некоторые функции JVMTI, в то же время используя JDWP более или менее прозрачно.
Ошибка , упомянутая в ответе Боба Доббса, касается вводящего в заблуждение сообщения об ошибке и того факта, что JVM будет пытаться загрузить JDWP один раз при каждом его указании в командной строке. Нигде не говорится, что JDWP и JVMTI не могут использоваться вместе.
Подробнее здесь: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzaha/jpdebuga.htm