ddtrace 系列篇之 dd-trace-java 项目编译

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 as JAVA_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

参考文档

CONTRIBUTING

相关推荐
CodeCaptain6 分钟前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人1 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战1 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘1 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays10111 小时前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
摇滚侠2 小时前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea
云姜.2 小时前
java多态
java·开发语言·c++
李堇2 小时前
android滚动列表VerticalRollingTextView
android·java
泉-java2 小时前
第56条:为所有导出的API元素编写文档注释 《Effective Java》
java·开发语言