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

相关推荐
智能直播15 分钟前
RK3528 V4L2 框架 UVC 接口自动获取 H.264 / MJPEG / YUYV 格式:从内核采集到硬解分发
java·网络·实时音视频·视频编解码·h.264
171320330计算机毕设编程23 分钟前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
badhope36 分钟前
Spring AI Alibaba停更:Java程序员的信任,还能被辜负几次?
java·spring
const_qiu43 分钟前
第一章 1.1-1.2:基础模型调用与 TypeScript 入门 —— Java 开发者的视角
java·javascript·typescript
Wang's Blog1 小时前
Java 项目实战: 交友项目 - Dubbo 负载均衡策略与实战验证
java·dubbo·交友
SL_staff1 小时前
销售知识库7天落地实践:面向业务侧的零代码嵌入方案
java·开源·产品
GreatSQL社区1 小时前
主从复制SQL线程中断——字符集砸出的坑
java·数据库·算法
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 入门案例:服务提供者搭建总结
java·交友
hudd6681 小时前
JavaEE 初阶 - 多线程(进阶)
java·开发语言·java-ee
Pniubi2 小时前
区分Java创建线程池、多线程
java·线程·线程池·多线程·并发