dd-trace-java
是 Datadog 开源的 java APM 框架,本文主要讲解如何编译 dd-trace-java 项目。
环境准备
- JDK 编译环境(三个都要:jdk8\jdk11\jdk17)
- Gradle 8
- Maven 3.9 (需要 15G 以上的存储空间存放依赖)
- Git >=2 (低于会出现一想不到的异常,建议用最新版本)
- 梯子
- 内存 8G (如果二开,则需要 16G 以上)
JDK
- JDK version 8 must be installed.
- JDK version 11 must be installed.
- JDK version 17 must be installed.
JAVA_8_HOME
must point to the JDK-8 location.JAVA_11_HOME
must point to the JDK-11 location.JAVA_17_HOME
must point to the JDK-17 location.- The JDK-8
bin
directory must be the only JDK on the PATH (e.g.$JAVA_8_HOME/bin
). JAVA_HOME
may be unset. If set, it must point to JDK-8 (same asJAVA_8_HOME
).
MacOS users, remember that/usr/libexec/java_home
may control which JDK is in your path.
建议用 JDK 11 进行编译,JDK 8 好像通不过,可以尝试。
环境变量配置
shell
# JAVA
export JAVA_17_HOME=/home/liurui/middleware/jdk/jdk-17.0.6
export JAVA_11_HOME=/home/liurui/middleware/jdk/jdk-11.0.18
export JAVA_8_HOME=/home/liurui/middleware/jdk/jdk1.8.0_361
# ddtrace
export DDTRACE_JAVA_HOME=$JAVA_11_HOME
export JAVA_HOME=$DDTRACE_JAVA_HOME
# gradle
export GRADLE_8_HOME=/home/liurui/middleware/gradle-8.0.2
export GRADLE_HOME=$GRADLE_8_HOME
export GRADLE_USER_HOME=/home/liurui/middleware/gradle_repository
# maven
export M2_39_HOME=/home/liurui/middleware/apache-maven-3.9.1
export M2_HOME=$M2_39_HOME
PATH=$M2_HOME/bin:$JAVA_HOME/bin:$GRADLE_HOME/bin:$GROOVY_HOME/bin:$GO_HOME/bin:$DOTNET_ROOT:$PATH
源码下载
观测云基于 ddtrace做了很多增强的功能,且会不定期同步官方的代码,保持官方与观测云代码同步
shell
git clone https://github.com/GuanceCloud/dd-trace-java.git
也可以基于官方的
git clone https://github.com/DataDog/dd-trace-java.git
不要基于 master 分支,建议基于 tag 来编译,tag 是稳定的。
比如当前最新tag为v1.19.0
,用以下命令进行 checkout:
git checkout -b 1.19.0_local v1.19.0
命令行编译
如果不需要调整源码,建议不要用 idea 进行编译,直接通过命令行即可。
编译准备工作:
-
仓库选择:由于首次构建需要下载大量的依赖包,为了保证能够顺利构建,不建议使用阿里云镜像仓库,因为阿里云镜像仓库并非与 maven 仓库同步。也可以选择使用阿里云镜像仓库,如果构建出现了依赖下载问题,可以再切回 maven 仓库。
-
构建时间:下载依赖包耗时长,建议空闲时构建,或者使用空闲电脑构建,首次构建一般需要 12 个小时以上,甚至可能会超过 24 小时。Window 环境编译耗时可能更长,48小时也不足为怪,要做好心理准备。
-
梯子 : 没有梯子,估计很多依赖都无法下载,视具体网络情况而定。
-
运气 : 最终编译时间长短取决于运气
liurui@liurui:~/code$ cd dd-trace-java/
liurui@liurui:~/code/dd-trace-java$ gradle clean shadowJar
....Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
See https://docs.gradle.org/8.0.2/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1m 32s
1323 actionable tasks: 999 executed, 311 from cache, 13 up-to-date
build 成功后,可以在dd-java-agent/build/libs/
目录下找到刚刚 build 成功的 agent 包。
idea 编译
如果需要用 idea 编译,系统内存至少是 16G
配置 Gradle
编译
执行 Task shadowJar