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

相关推荐
哎呦没13 分钟前
SpringBoot框架下的资产管理自动化
java·spring boot·后端
m0_571957582 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
魔道不误砍柴功4 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2344 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟6 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity7 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天7 小时前
java的threadlocal为何内存泄漏
java
caridle7 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^7 小时前
数据库连接池的创建
java·开发语言·数据库