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

у меня есть точка останова на строке, где находится

3 ответов


мое решение:

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

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"

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

Maven

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

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

это не будет передан непосредственно в maven JVM, вместо этого он будет передан в 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 конфигурация (снова я использую слушать стратегии. Вы должны настроить его в соответствии с параметрами процесса):

enter image description here

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

enter image description here

наконец-то запустить exec:exec строка выше и отладка вашего приложения по желанию:

enter image description here


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

  1. конфигурация Maven для exec:exec С системой свойства и конфигурация агента JDWP:

    enter image description here

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


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

mvnDebug install exec:java 

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


для отладки веб-приложений в проектах maven с помощью IntelliJ Community Edition вы можете добавить плагин tomcat или jetty в свой WAR pom следующим образом:

<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>

затем с помощью этих плагинов приложение можно запустить в командной строке (из каталога пом):

mvnDebug clean install tomcat7:run-war

или на пристани:

mvnDebug clean install jetty:run-war

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

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

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