Отладчик 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
конфигурация (снова я использую слушать стратегии. Вы должны настроить его в соответствии с параметрами процесса):
теперь переключите точки останова и Debug удаленный конфигурации. Используя настройки выше, он будет ждать, пока ваш процесс не начнется:
наконец-то запустить exec:exec
строка выше и отладка вашего приложения по желанию:
поэтому в основном вам нужны две конфигурации "Run/Debug" для этого:
на 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-дневная пробная версия где вы можете оценить эта особенность и другие.