你如何使用intellij调试java注释处理器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你如何使用intellij调试java注释处理器?相关的知识,希望对你有一定的参考价值。
如何使用intellij调试java注释处理器?
最好使用IDEA IntelliJ。我尝试在处理器内部设置一个断点并运行,但它没有破坏。
如果您确实需要调试注释处理器,最好从命令行运行注释处理器,而不是在启用了调试的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。
按照这些步骤,这些在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)。编辑构建配置并添加远程配置qazxsw poi
3).Run最近创建了运行配置APT。
4)。在注释处理代码中添加断点并构建整个项目
本教程是为Android项目编写的。主模块名称像往常一样是“app”。该项目包含一个名为“annotation”的子模块,它是“app”的子顺序。 “app”模块使用gradle声明运行注释处理。
SIMPLE VERSION(从终端运行编译并从IDE连接)
- [必需]添加新项目配置“+” - >“远程”。选中“仅限单个实例”。所有其他设置都会自动生成。将
apt project(':annotation')
留作类路径。端口应保留为默认值5005。
<whole project>
./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac
- 尽可能快地以调试模式运行APT项目配置:)
- [提示]我们从EMPTY gradle.properties文件开始
- [提示]不要使用gradle守护程序(--no-daemon / org.gradle.daemon = false选项)
- [提示]在调试模式下运行gradle(org.gradle.debug = true选项)
- [提示]运行应用程序的模块编译而不是处理器的模块编译(应用程序的编译运行注释处理!)
- 我们通常不会在Android Studio中添加任何Java编译器设置(即文件 - >其他设置 - >默认设置)
扩展版(使用gradle.properties)
- 将以下内容添加到gradle.properties文件中:
org.gradle.daemon=false org.gradle.debug=true
- 从终端运行编译:
./gradlew :app:clean :app:compileDebugJavaWithJavac
高级版本(只需按IDE中的调试)
- 将bash脚本添加到项目主目录(例如compile.sh)
#!/bin/bash ./gradlew :app:clean :app:compileDebugJavaWithJavac &
请记住后台处理的“&”符号。
- 转到我们在步骤1中创建的APT配置设置,并添加Before启动配置。选择运行外部工具。
- 添加我们之前创建的compile.sh脚本的路径。
警告
搞乱gradle编译,编译期间的NullPointer异常等有时会导致AndroidStudio卡住(在gradle刷新阶段冻结)。如果您无法从IDE停止gradle,请在终端中使用此命令:
在项目刷新期间关闭调试选项有时可以帮助Android Studio回到正确的轨道。
可以运行ps -A | grep gradle | awk '{ print $1; }' | xargs kill -9
并对其进行调试,如图所示。但是在我的情况下编写完整的类路径是很乏味的,所以我想把它留给IDEA。因此,在我想要应用我的注释处理器的模块中,只需使用main方法创建一个类。
javac
为此,您需要将public static void main(String[] args) {
com.sun.tools.javac.Main.main("-proc:only",
"-processor", "my.pkgs.MyAnnotationProcessor",
"my/pkgs/any/ClassIWantProcess.java");
}
添加到SDK的JAR中(默认情况下不存在)。这就是编译JSP的appservers在其类路径上需要这个JAR的原因 - 他们需要编译器。
然后只需为您的运行配置设置正确的工作目录(因此java文件的相对路径是正确的),将您的断点设置为处理器并根据您的意愿进行调试!
好处 - 类路径已由IDEA设置并由“内部”javac使用,因为这里它不是一个单独的过程。我相信也可以将它翻译成其他IDE。
我发现以下资源可以帮到你:$JAVA_HOME/lib/tools.jar
这家伙逐步解释了如何使用Eclipse调试注释处理器。
注释处理在编译期间发生,因此正常调试将不起作用。如果要在项目的上下文中调试它,可以使用IntelliJ远程调试,同时在调试模式下使用Gradle或Maven。然后,您可以在Annotation Processor的文件中放置断点。
见http://code.google.com/p/acris/wiki/AnnotationProcessing_DebuggingEclipse。
免责声明:我写了这篇文章。
对于Maven项目,Debugging an Annotation Processor in any project更详细地解释了以下步骤,对我有用:
- 添加“远程”运行配置并将“端口”设置为8000。
- 从项目目录(在命令行上)发出命令this post。
- 运行运行配置。要在进程退出后启动新会话,请从(2)开始重复。
记得在项目的依赖项发生更改时运行mvnDebug clean install
(例如,如果注释处理器与您正在调试它的项目位于不同的工件中)。
使用IntelliJ IDEA和Gradle调试注释处理器
- 设置自定义VM选项
mvn install
:按Ctrl + Shift + A并在操作列表中选择编辑自定义VM选项...以添加自定义VM选项,然后重新启动IDE。 - 使用默认参数创建远程调试配置:运行 - >编辑配置... - >添加新配置(Alt + Insert) - >远程。
-Dcompiler.process.debug.port=5005
- 设置断点。
- 使用终端中的Gradle构建:(如果命令的执行被冻结,则可以,不要终止进程)。
- 在IDE中调试远程调试配置(请参阅步骤3):选择合适的远程调试配置,然后按Shift + F9。
$ ./gradlew --no-daemon -Dorg.gradle.debug=true clean build
希望它有助于某人:)
以上是关于你如何使用intellij调试java注释处理器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IntelliJ IDEA 14 中为当前项目工作配置注释处理?
如何在 IntelliJ 上使用 @ConfigurationProperties 为 Spring Boot 配置注释处理器进行配置?
使用 Intellij 的调试器时如何仅单步执行“我的”Java 源代码?
IDEA Intellij 如何调试从 Java 类调用的 PL/SQL 代码