#java #maven #debugging #netbeans #remote-debugging
#java #maven #отладка #netbeans #удаленная отладка
Вопрос:
Я пытаюсь удаленно отладить файл jar, связанный с зависимостями, созданными с помощью maven-assembly-plugin. Но все, что я делаю, и независимо от того, как я вызываю отладчик на машине, на которой выполняется код (или на моей локальной машине для тестирования) Я всегда получаю сообщение «Не удалось найти основной класс». Это сообщение, даже если я укажу точный основной класс в командной строке.
POM-файл:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.xxx.yyy.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
Я создаю jar с зависимостями с помощью:
clean compiler:compile assembly:single
Отладка начинается с:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8800,server=y,suspend=y -classpath %classpath com.xxx.yyy.MyMainClass pubsubtest-0.1-jar-with-dependencies.jar
Приложение запускается и сообщает:
Listening for transport dt_socket at address: 8800
Но когда я подключаюсь к порту с помощью Netbeans, проблема:
Error: Could not find or load main class com.xxx.yyy.MyMainClass
Я что-то упускаю? Должен ли я как-то настроить Netbeans? В Netbeans я оставляю проект открытым.
Я следовал этому руководству: https://blogs.oracle.com/atishay/entry/use_netbeans_to_debug_a
Комментарии:
1. Прежде всего, забудьте об отладке. Можете ли вы нормально запустить приложение из командной строки? Кроме того, ваш вызов командной строки выглядит странно — вам не нужен JAR в качестве последнего аргумента (хотя JAR должен быть в пути к классу). Кроме того, если у вас определен основной класс, вам не нужно даже указывать имя класса.
2. Да, я могу запустить его в основном без каких-либо ошибок, но мне нужно изменить его дальше, и проблема в том, что я могу протестировать его только на удаленной виртуальной машине, потому что он может работать только на нем из-за некоторых других компонентов, доступных только в локальной сети этой виртуальной машины, это проблема политики проекта, яя просто гость. Итак, как тогда должен выглядеть вызов?