你如何使用intellij调试java注释处理器?

时间:2011-12-21 08:47:42

标签: java intellij-idea

如何使用intellij调试java注释处理器?

最好使用IDEA IntelliJ。我尝试在处理器内部设置断点并运行,但它没有中断。

8 个答案:

答案 0 :(得分:32)

如果您确实需要调试注释处理器,最好从命令行运行注释处理器,而不是在启用了调试的IDE中运行注释处理器,并使用IDE的调试器附加到该处理器。


如果直接运行javac,您可以通过指定以下额外参数来调试它:

javac -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 ... (usual javac parameters go here)

如果运行Maven,请使用mvndebug而不是标准mvn命令 - Maven在进程中运行编译器。


如果运行Ant,请在运行前将以下内容添加到ANT_OPTS环境变量中:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

通过所有这些执行,javac,Ant或Maven进程将等待您在实际开始执行之前附加调试器。 IntelliJ的说明是here。对于Eclipse,here

答案 1 :(得分:14)

按照以下步骤操作,这些适用于android studio for gradle项目: -

1)。在gradle.properties中添加以下行

org.gradle.daemon=true
org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

2)。编辑构建配置并添加远程配置 enter image description here

3).Run最近创建了运行配置APT。

4)。在注释处理代码中添加断点并构建整体项目

答案 2 :(得分:10)

本教程是为 Android项目编写的。主要模块名称像往常一样“app”。该项目包含一个名为“annotation”的子模块,它是“app”的子顺序。 “app”模块使用gradle声明运行注释处理 apt project(':annotation')

SIMPLE VERSION (从终端运行编译并从IDE连接)

  1. [必需]添加新项目配置“+” - &gt; “远程”即可。检查“仅限单个实例”。所有其他设置都会自动生成。将<whole project>保留为类路径。端口应保留为默认 5005
  2. enter image description here

    1. [必需]请确保通过致电:./gradlew --stop
    2. 停止所有gradle实例
    3. [必需]运行命令:./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac
    4. enter image description here

      1. 尽快以调试模式运行APT项目配置:)
      2. enter image description here

        1. [提示]我们从EMPTY gradle.properties 文件开始
        2. [提示]请勿使用gradle 守护程序( - no-daemon / org.gradle.daemon = false选项)
        3. [提示]在调试模式下运行gradle(org.gradle.debug = true选项)
        4. [提示]运行应用程序的模块编译<​​/ strong>而不是处理器的模块编译(应用程序的编译运行注释处理!)
        5. 我们通常不会在Android Studio中添加任何Java编译器设置(即文件 - &gt;其他设置 - &gt;默认设置)
        6. 扩展版(使用 gradle.properties

          1. 将以下内容添加到 gradle.properties 文件中:
          2. 
                org.gradle.daemon=false
                org.gradle.debug=true
            
            
            1. 从终端运行编译:
            2. ./gradlew :app:clean :app:compileDebugJavaWithJavac

              enter image description here

              ADVANCED VERSION (只需在IDE中按调试)

              1. 将bash脚本添加到项目主目录(例如 compile.sh
              2. #!/bin/bash
                ./gradlew :app:clean :app:compileDebugJavaWithJavac &
                

                记住'&amp;'签署背景处理。

                1. 转到我们在步骤1中创建的APT配置设置,并添加启动前配置。选择运行外部工具
                2. enter image description here

                  1. 添加我们之前创建的 compile.sh 脚本的路径。
                  2. enter image description here

                    警告

                    在编译过程中弄乱gradle编译, NullPointer异常有时会导致AndroidStudio卡住(在gradle刷新阶段冻结)。如果您无法从IDE中停止gradle ,请在终端中使用此命令:

                    ps -A | grep gradle | awk '{ print $1; }' | xargs kill -9
                    

                    在项目刷新期间关闭调试选项有时可以帮助Android Studio回到正确的轨道。

答案 3 :(得分:7)

可以运行javac并调试它,如图所示。但是在我的情况下编写完整的类路径是很乏味的,所以我想把它留给IDEA。因此,在我想要应用我的注释处理器的模块中,只需使用main方法创建一个类。

public static void main(String[] args) {
    com.sun.tools.javac.Main.main("-proc:only",
        "-processor", "my.pkgs.MyAnnotationProcessor",
        "my/pkgs/any/ClassIWantProcess.java");
}

为此,您需要将$JAVA_HOME/lib/tools.jar添加到SDK的JAR中(默认情况下不存在)。这就是编译JSP的appservers在其类路径上需要这个JAR的原因 - 他们需要编译器。

然后只为运行配置设置正确的工作目录(因此java文件的相对路径是正确的),将断点设置为处理器并随意调试!

好处 - 类路径已由IDEA设置并由“内部”javac使用,因为这里它不是一个单独的进程。我相信也可以将它翻译成其他IDE。

答案 4 :(得分:3)

我找到了以下可以帮助您的资源:http://code.google.com/p/acris/wiki/AnnotationProcessing_DebuggingEclipse

这家伙逐步解释了如何使用Eclipse调试注释处理器。

答案 5 :(得分:3)

在编译期间进行注释处理,因此正常的调试不起作用。如果要在项目的上下文中调试它,可以使用IntelliJ远程调试,同时在调试模式下使用Gradle或Maven。然后,您可以在Annotation Processor的文件中添加断点。

请参阅Debugging an Annotation Processor in any project

免责声明:我写了帖子。

答案 6 :(得分:1)

对于Maven项目,this post,更详细地解释了以下步骤,对我有用:

  1. 添加“远程”运行配置并将“端口”设置为8000。

  2. 从项目目录(在命令行上)发出命令mvnDebug clean install

  3. 运行运行配置。要在流程退出后开始新会话,请从(2)重复。

  4. 请记住在项目的依赖项发生变化时运行mvn install(例如,如果注释处理器与您正在调试它的项目位于不同的工件中)。

答案 7 :(得分:0)

使用IntelliJ IDEA和Gradle调试注释处理器

  1. 设置自定义VM选项-Dcompiler.process.debug.port=5005:按 Ctrl + Shift + A ,然后在要添加的操作列表中选择 Edit Custom VM Options ... 一个自定义VM选项,然后重新启动IDE。
  2. 使用默认参数创建远程调试配置:运行->编辑配置...->添加新配置(Alt +插入)->远程enter image description here
  3. 设置断点。
  4. 从终端$ ./gradlew --no-daemon -Dorg.gradle.debug=true clean build使用Gradle进行构建(如果命令的执行被冻结,则可以终止进程,这没关系)。
  5. 在IDE中调试远程调试配置(请参阅步骤3):选择合适的远程调试配置,然后按 Shift + F9 enter image description here

希望对别人有帮助:)