Удаленная отладка Java с помощью Maven и Netbeans

#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. Да, я могу запустить его в основном без каких-либо ошибок, но мне нужно изменить его дальше, и проблема в том, что я могу протестировать его только на удаленной виртуальной машине, потому что он может работать только на нем из-за некоторых других компонентов, доступных только в локальной сети этой виртуальной машины, это проблема политики проекта, яя просто гость. Итак, как тогда должен выглядеть вызов?