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

aku*_*001 39 java intellij-idea

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

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

pru*_*nge 33

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


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

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

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


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

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
Run Code Online (Sandbox Code Playgroud)

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


Gag*_*ngh 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
Run Code Online (Sandbox Code Playgroud)

2).编辑构建配置并添加远程配置 在此输入图像描述

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

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

  • 创建配置后,我得到一个"无法找到或加载主类agentlib:jdwp [...]"错误,我不知道为什么. (2认同)
  • 错过的一步是从cmd`./gradlew.bat应用程序运行javac任务:compileDebugJavaWithJavac --debug`然后立即从IDE启动创建的配置任务. (2认同)

kos*_*cki 10

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

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

  1. [必需]添加新项目配置"+" - >"远程".选中"仅限单个实例".所有其他设置都会自动生成.保留<whole project>为类路径.端口应保留为默认值5005.

在此输入图像描述

  1. [必需]确保通过调用以下命令停止所有gradle实例: ./gradlew --stop
  2. [必需]运行命令: ./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac

在此输入图像描述

  1. 尽可能快地以调试模式运行APT项目配置:)

在此输入图像描述


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

扩展版(使用gradle.properties)

  1. 将以下内容添加到gradle.properties文件中:

    org.gradle.daemon=false
    org.gradle.debug=true

  1. 从终端运行编译:

./gradlew :app:clean :app:compileDebugJavaWithJavac

在此输入图像描述


高级版本(只需按IDE中的调试)

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

请记住后台处理的"&"符号.

  1. 转到我们在步骤1中创建的APT配置设置,并添加Before启动配置.选择运行外部工具.

在此输入图像描述

  1. 添加我们之前创建的compile.sh脚本的路径.

在此输入图像描述


警告

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

ps -A | grep gradle | awk '{ print $1; }' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

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


vir*_*o47 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");
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Hal*_*ast 5

对于 Maven 项目,这篇文章更详细地解释了以下步骤,对我有用:

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

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

  3. 运行运行配置。为了在进程退出后启动新会话,请重复 (2)。

请记住,mvn install当项目的依赖项发生更改时(例如,如果注释处理器位于与您从中调试它的项目不同的工件中)。


Ale*_*exR 3

我发现以下资源可以帮助您:http://code.google.com/p/acris/wiki/AnnotationProcessing_DebuggingEclipse

该人逐步解释了如何使用 Eclipse 调试注释处理器。