System.out.println("test")
コマンドがある行にブレークポイントがあります。印刷された文字列 "test"が表示されるため、コマンドは実行によって到達すると考えています。ただし、ブレークポイントは無視されます。
ブレークポイントは常に赤い丸で、目盛りや十字はありません。 IDEA=は、コマンドが実行されるため、クラスがロードされていないと考えている場合、これは問題だと思います。
私はさまざまな状況でそれを再現できます:
デバッグを押すと(Maven構成install exec:exec -DforkMode=never
)
リモートデバッグ-コンソールでデバッグモードでmavenゴールを実行します。
mvnDebug install exec:exec -DforkMode=never
または
mvnDebug install exec:exec
iDEAのリモートデバッグ構成:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
どちらの場合も、デバッガーは「ターゲットVMに接続済み、アドレス: 'localhost:8000'、トランスポート: 'socket'」のみを出力します
私も試してみました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
OS名:「linux」、バージョン:「3.11.0-17-generic」、Arch:「AMD64」、family:「unix」
編集: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>
私の解決策:
システムプロパティに依存するプログラムがあることを考慮してください。
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
によって開始されたプロセスをデバッグできます。
exec:exec
目標を変更して、リモートデバッグを有効にします。 suspend=y
とserver=n
を使用していますが、自由に JDWPエージェント を設定してください:
-agentlib:jdwp=transport=dt_socket,server=n,address=127.0.0.1:8000,suspend=y
これはnotmaven 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"
Remote
構成を作成します(ここでもListen戦略を使用しています。プロセス設定に従って調整する必要があります)。
次に、ブレークポイントを切り替えて、リモート構成をDebugします。上記の設定を使用すると、プロセスが開始するまで待機します。
最後に、上記のexec:exec
行を実行し、アプリケーションを自由にデバッグします。
基本的に、これを機能させるには2つの「実行/デバッグ」構成が必要です。
Intellij Community Editionを使用してMavenプロジェクトのWebアプリケーションをデバッグするには、次のように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>
次に、これらのプラグインを使用して、アプリケーションをコマンドラインで(pomディレクトリから)起動できます。
mvnDebug clean install Tomcat7:run-war
または桟橋の場合:
mvnDebug clean install jetty:run-war
コマンドラインからデバッグモードで実行しているアプリケーション(Intellijから実行する必要はありません)で、ポストしたものと同様のリモートデバッグ構成を行い、ブレークポイントにヒットする必要があります。
Intellij Ultimate Editionを使用する場合、Tomcatまたは他のサーバーのサーバー構成を作成し、完全に統合された方法でアプリケーションをデプロイでき、デバッグとホットデプロイメントを透過的に処理できるため、これは必要ありません。
日間トライアル があり、この機能や他の機能を評価できます。
exec
ゴールは、プログラムを別のプロセスで実行するため、デバッガーが適切なJVMに接続していない可能性があります。代わりに、Java
ゴールを使用してみてください。例:
mvnDebug install exec:Java
これにより、同じプロセスでプログラムが実行され、ブレークポイントに到達することが期待されます。