Подтвердить что ты не робот

IntelliJ IDEA 13 отладчик не останавливается на контрольной точке в java для проекта maven

У меня есть точка останова на строке, где находится команда System.out.println("test"). Я считаю, что команда выполняется путем выполнения, потому что я вижу напечатанную строку "test". Но точка останова игнорируется.

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

Я могу воспроизвести его в различных обстоятельствах:

  • Когда я нажимаю debug (с конфигурацией maven install exec:exec -DforkMode=never)

  • Удаленная отладка - я запускаю команду maven в режиме отладки в консоли:

    mvnDebug install exec:exec -DforkMode=never

    или

    mvnDebug install exec:exec

    удаленная конфигурация отладки в IDEA:

    • Аргументы для запуска удаленной JVM:
      -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
    • Для JDK 1.4.X:
      -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
    • Транспорт: Socket
    • Режим отладки: Прикрепить
    • Хост: localhost
    • Порт: 8000

В обоих случаях отладчик только печатает "Подключен к целевой VM, адрес:" localhost: 8000 ", транспорт:" сокет "

Я также пробовал File > Invalidate Caches / Restart и чистая сборка, но точка останова по-прежнему игнорируется.

Конфигурация:

Ubuntu 13.10
IntelliJ IDEA Ultimate build 133.944
Apache Maven 3.0.4
Версия Java: 1.7.0_51, поставщик: Oracle Corporation
Название ОС: "linux", версия: "3.11.0-17-generic", arch: "amd64", family: "unix"

EDIT: соответствующая часть pom.xml:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <configuration>
    <executable>java</executable>
      <arguments>
        <argument>-D--secret--.server.configuration=/usr/local/etc</argument>
        <argument>-classpath</argument><classpath/>
        <argument>com.--secret--.Server</argument>
      </arguments>
  </configuration>
</plugin>
4b9b3361

Ответ 1

Мое решение:

Учитывая, что у вас есть программа, которая зависит от свойств системы:

package com.mycompany.app;


public class App {

    private static final String GREETING = System.getProperty("greeting", "Hi");

    public static void main(String[] args) {
        int x = 10;
        System.out.println(GREETING);
    }
}

И вы запускаете его с помощью exec:exec:

mvn exec:exec -Dexec.executable=java "-Dexec.args=-classpath %classpath -Dgreeting=\"Hello\" com.mycompany.app.App"

С помощью некоторой "начальной магии" мы можем отладить процесс, запущенный Maven exec:exec.

Maven

Измените цель exec:exec, чтобы включить удаленную отладку. Я использую suspend=y и server=n, но не стесняйтесь настраивать JDWP Agent, как вам угодно:

-agentlib:jdwp=transport=dt_socket,server=n,address=127.0.0.1:8000,suspend=y

Это будет не передаваться непосредственно в mVN maven, вместо этого он будет передан в exec.args, который будет использоваться exec:exec:

mvn exec:exec -Dexec.executable=java "-Dexec.args=-classpath %classpath -agentlib:jdwp=transport=dt_socket,server=n,address=127.0.0.1:8000,suspend=y -Dgreeting=\"Hello\" com.mycompany.app.App"

IntelliJ IDEA

Создайте конфигурацию Remote (снова я использую стратегию Listen. Вы должны настроить ее в соответствии с вашими настройками процесса):

введите описание изображения здесь

Теперь переключите свои точки останова и Отладка удаленной конфигурации. Используя приведенные выше настройки, он будет ждать, пока ваш процесс не запустится:

введите описание изображения здесь

Наконец, запустите строку exec:exec выше и отлаживайте приложение по своему усмотрению:

введите описание изображения здесь


Итак, в основном вам нужны две конфигурации "Run/Debug" для этого:

  • Конфигурация Maven для exec:exec с системными свойствами и конфигурацией агента JDWP:

    введите описание изображения здесь

  • Удаленная конфигурация, действующая как клиент.

Ответ 2

Цель exec будет выполнять вашу программу в отдельном процессе, поэтому отладчик может не подключаться к правой JVM. Вместо этого попробуйте использовать цель java, например:

mvnDebug install exec:java 

Это приведет к выполнению вашей программы в том же процессе и, надеюсь, вы попадете в точку останова.

Ответ 3

Чтобы отлаживать веб-приложения в проектах maven с помощью Intellij Community Edition, вы можете добавить плагин tomcat или пристань к вашему WAR-помпу, например:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <configuration>
                <port>8080</port>
                <path>/yourapp</path>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
        </plugin>
    </plugins>
</build>

При необходимости можно добавить драйверы базы данных следующим образом:

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <dependencies>
        <dependency>
           ... your database driver groupId and artifactId ...
        </dependency>
    </dependencies>
</plugin>

Затем, используя эти плагины, приложение можно запустить в командной строке (из каталога pom):

mvnDebug clean install tomcat7:run-war

Или для причала:

mvnDebug clean install jetty:run-war

При запуске приложения в режиме отладки из командной строки (вам не нужно запускать его из Intellij), выполните конфигурацию удаленной отладки, аналогичную той, которую вы опубликовали, и точка останова должна быть удалена.

Если вы используете Intellij Ultimate Edition, тогда это не обязательно, потому что вы можете создать конфигурацию сервера для Tomcat или любого другого сервера и полностью развернуть приложение, при этом отладка и горячее развертывание обрабатываются прозрачно.

Существует 30-дневная пробная версия, где вы можете оценить эту функцию и другие.