web-dev-qa-db-fra.com

IntelliJ IDEA 13 débogueur ne s'arrête pas au point d'arrêt dans Java pour le projet maven

J'ai un point d'arrêt sur une ligne où se trouve la commande System.out.println("test"). Je crois que la commande est atteinte par exécution car je vois la chaîne imprimée "test". Mais le point d'arrêt est ignoré.

Le point d'arrêt est un cercle rouge tout le temps, sans tique ni croix. Je pense que c'est un problème lorsque IDEA pense que la classe n'est pas chargée, alors qu'elle l'est, car la commande est exécutée.

Je peux le reproduire dans diverses circonstances:

  1. Lorsque j'appuie sur le débogage (avec la configuration de maven install exec:exec -DforkMode=never)

  2. Débogage à distance - J'exécute maven goal en mode débogage dans la console:

    mvnDebug install exec:exec -DforkMode=never

    ou

    mvnDebug install exec:exec

    configuration de débogage à distance dans IDEA:

    • Arguments pour exécuter la JVM distante:
      -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
    • Pour JDK 1.4.X:
      -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
    • Transport: Prise
    • Mode débogueur: attacher
    • Hôte: localhost
    • Port: 8000

Dans les deux cas, le débogueur affiche uniquement "Connecté à la machine virtuelle cible, adresse: 'localhost: 8000', transport: 'socket'"

J'ai aussi essayé File > Invalidate Caches / Restart et build propre, mais le point d'arrêt est toujours ignoré.

Configuration:

Ubuntu 13.10
IntelliJ IDEA Ultimate build 133.944
Apache Maven 3.0.4
Version Java: 1.7.0_51, fournisseur: Oracle Corporation
Nom du système d'exploitation: "linux", version: "3.11.0-17-generic", Arch: "AMD64", famille: "unix"

EDIT: partie pertinente de 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>
17
mirelon

Pour déboguer des applications Web dans des projets maven à l'aide de Intellij Community Edition, vous pouvez ajouter un plugin Tomcat ou jetty à votre pom WAR comme ceci:

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

Il est possible si nécessaire d'ajouter des pilotes de base de données comme celui-ci:

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

Ensuite, en utilisant ces plugins, l'application peut être lancée dans la ligne de commande (à partir du répertoire pom):

mvnDebug clean install Tomcat7:run-war

Ou pour la jetée:

mvnDebug clean install jetty:run-war

Avec l'application exécutée en mode débogage à partir de la ligne de commande (vous n'avez pas besoin de l'exécuter à partir d'Intellij), effectuez une configuration de débogage à distance similaire à ce que vous avez publié et le point d'arrêt doit être atteint.

Si vous utilisez Intellij Ultimate Edition, cela n'est pas nécessaire, car vous pouvez créer une configuration de serveur pour Tomcat ou tout autre serveur et déployer l'application de manière entièrement intégrée, le débogage et le déploiement à chaud étant gérés de manière transparente.

Il y a un essai de 30 jours où vous pouvez évaluer cette fonctionnalité et d'autres.

1
Angular University

L'objectif exec exécutera votre programme dans un processus distinct, il est donc possible que le débogueur ne se connecte pas à la bonne machine virtuelle Java. Essayez plutôt d'utiliser l'objectif Java, par exemple:

mvnDebug install exec:Java 

Cela exécutera votre programme dans le même processus et j'espère que vous atteindrez votre point d'arrêt.

1
Jonathan