MacBook Pro
Java:1.8+
上篇已经讲解了如何写个简单的自定义注解,但是开发,肯定需要打断点调试的。
编译阶段该如何启动断点呢?
找到gradle
家目录:
我的:
/Users/yutao/.gradle
yutaodeMacBook-Pro:.gradle yutao$ pwd
/Users/yutao/.gradle
yutaodeMacBook-Pro:.gradle yutao$ ll
total 32
drwxr-xr-x 11 yutao staff 352 4 13 10:26 caches
drwxr-xr-x 6 yutao staff 192 3 23 14:19 daemon
-rw-r--r-- 1 yutao staff 155 5 11 18:39 gradle.properties
drwxr-xr-x 6 yutao staff 192 12 20 18:47 native
drwxr-xr-x 5 yutao staff 160 5 7 15:38 notifications
-rw-r--r--@ 1 yutao staff 11496 12 9 16:47 settings.xml
drwxr-xr-x 2 yutao staff 64 11 4 2019 workers
drwxr-xr-x 3 yutao staff 96 11 4 2019 wrapper
可以看到有个gradle.properties
文件,如果没有,就创建一个;
在文件后面添加:
org.gradle.daemon=true
org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
=-=-=-=-=-=-=-=-=-=-=-=2020年0512日-=-=-=-=-=-=-=-=-=-=
回到公司的项目里刷新依赖时,即点击gradle
中刷新按钮时,报错了:
Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at https://docs.gradle.org/4.6/userguide/gradle_daemon.html
Please read the following process output to find out more:
-----------------------
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
-----------------------
Check the JVM arguments defined for the gradle process in:
- gradle.properties in project root directory
- gradle.properties in in GRADLE_USER_HOME directory
然后注释掉上面的配置就OK了;
所以目前建议,采用方法二,写到项目里的gradle.properties
文件中。
没有就新建一个
./gradlew --stop
./gradlew --daemon
执行结果:
yutaodeMacBook-Pro:processor yutao$ ./gradlew --stop
Stopping Daemon(s)
2 Daemons stopped
yutaodeMacBook-Pro:processor yutao$ ./gradlew --daemon
Starting a Gradle Daemon, 5 stopped Daemons could not be reused, use --status for details
> Task :help
Welcome to Gradle 5.2.1.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see a list of command-line options, run gradlew --help
To see more detail about a task, run gradlew help --task <task>
For troubleshooting, visit https://help.gradle.org
BUILD SUCCESSFUL in 4s
1 actionable task: 1 executed
yutaodeMacBook-Pro:processor yutao$
这一步网上很多是这样的:
./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac
上面这道命令是针对Android项目的,我不是搞Android开发,所以我创建的项目仅仅只是普通的Java项目。
因此我的项目的gradle
任务里面没有:compileDebugJavaWithJavac
这道任务。
Run - Edit configurations - 点击 左上角 + — 选择 Remote
启动后控制台会打印:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
表示成功。
yutaodeMacBook-Pro:processor yutao$ ./gradlew compileJava
你会发现,好像没有进入断点。
那是因为文件已经编译过了,需要对文件进行修改,不然编译器发现文件依然是之前的文件,就不编译了。
修改后,再次执行编译命令:
网上这一步很多是这样的:
./gradlew clean assembleDebug
# 或者
./gradlew assembleDebug
利用assembleDebug 这个任务task,来进行编译项目。这个任务其实是打包任务。
但是我的项目里是没有这个任务的,原有上面也说过,我不是Android项目。
所以配置上就没有引入这个任务。只有assemble
这个任务。
但是既然是编译,也没必要执行assemble
这种打包任务,执行编译compileJava
任务就好了。
参考地址:
注解解释器 annotationProcessor 断点调试
Java注解知识梳理—自定义注解处理器
如何debug自定义AbstractProcessor