skywalking实战--后端编译

本文详细介绍了Apache SkyWalking后端编译的步骤,包括环境准备、下载源码、编译和启动过程。在编译过程中,作者分享了遇到的坑,如mvnw文件的换行符问题、maven-wrapper.jar问题、未进行全部编译导致的错误等,并提供了相应的解决方案。此外,还涉及npm相关错误、skywalking-ui版本问题、npm权限问题及maven-compiler-plugin编译失败等常见问题的处理办法。

本源码来自于skywalking 8.9.1版本
本节主要讲解skywalking后端编译过程中遇到的坑,如果你不幸也遇到了,希望对你有所帮助。
注:本篇文章主要是作为自己看书后的总结,内容有可能会存在一些个人理解上的偏差,如果有网友找出问题欢迎提出,感谢!!!如果我理解上的错误误导了您,在此表示抱歉!!!

环境:MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)

编译步骤

这里直接抄官网的步骤 https://skywalking.apache.org/docs/main/v9.2.0/en/guides/how-to-build/

1、环境准备

准备jdk8+,maven3.6.0+版本、nodejs、vue、npm(前端版本我直接下载网上最新的可能你操作时前端版本太高也会引起问题,您可以自行查找下 skywalking9.2 版本对应的这些前端环境按照他们的版本大致不会有问题)

2、下载源码

这里提供两种方式的下载源码
方式1:
git clone --recurse-submodules https://github.com/apache/skywalking.git
cd skywalking/

方式2:
git clone https://github.com/apache/skywalking.git
cd skywalking/
git submodule init
git submodule update

3、进入根目录,执行编译脚本

./mvnw clean package -Dmaven.test.skip

4、启动

编译成功后在根目录下有个dist目录,进去可以看到一个压缩文件,解压后进入 /apache-skywalking-apm-bin/bin 目录,执行 ./startup.sh 就可以启动前后端

踩坑记录

mvnw文件存在windows换行符

问题描述

下载完skywalking后,在根目录执行 ./mvnw clean package -Dmaven.test.skip 命令出现 zsh: ./mvnw: bad interpreter: /bin/sh^M: no such file or directory 报错

在这里插入图片描述

处理方式

分别执行以下两条命令
sed -i ‘s/\r//’ mvnw
sed -i -e ‘s/\r$//’ mvnw

再次执行 ./mvnw clean package -Dmaven.test.skip 就可以通过了

maven-wrapper.jar 问题

问题描述

在根目录执行 ./mvnw clean package -Dmaven.test.skip 命令,出现 错误:找不到或无法加载主类 org.apache.maven.wrapper.MavenWrapperMain
在这里插入图片描述

处理方式

根据 maven-wrapper.properties 文件内的 maven-wrapper地址去下载对应的版本,并将jar的名字改为 maven-wrapper,也就是去除jar的版本号,放到 .mvn/wrapper 目录中
在这里插入图片描述
再次执行 ./mvnw clean package -Dmaven.test.skip 就可以通过了

注意:不要按照其他网上说的执行 mvn -N io.takari:maven:wrapper 下载 maven-wrapper的jar包。

未进行全部编译,直接执行后端编译导致报错

问题描述

下载完skywalking项目,未进行过全部编译,直接执行后端编译,导致出现 webapp.jar找不到的报错
在这里插入图片描述

处理方式

下载完skywalking源码后,必须先执行一次 ./mvnw clean package -Dmaven.test.skip 才能继续执行其他高级编译的命令。因为高级编译只是编译某个某块,但是模块内依然会依赖其他的模块,如果直接执行高级编译,那么找不到依赖模块就会报错。

npm相关错误

问题描述

执行 ./mvnw clean package -Dmaven.test.skip 时出现 npm******相关的错误,这是由于skywalking中使用到了vue。

处理方式

下载、安装node.js、vue相关的环境。我是直接下载、安装最新的版本。

skywalking-ui 获取版本问题

问题描述

如果执行(git submodule update)遇到显示 skywalking-ui 获取版本问题(fatal: Fetched in submodule path ‘skywalking-ui’, but it did not contain 0e2541e3f1c0c5bacd7da4d13a32bd2b99402b8f. Direct fetching of that commit failed.),则 可以执行如下命令可以恢复

在这里插入图片描述

处理方式

(1)删除子模块:

git submodule deinit -f skywalking-ui
rm -rf .git/modules/skywalking-ui

(2)重新初始化子模块:

git submodule init
git submodule update

npm 权限问题

问题描述

执行 ./mvnw clean package -Dmaven.test.skip 出现如下报错:

Running ‘npm install --registry=https://registry.npmjs.org/’ in /Users/xxx/Documents/xxx/skywalking/skywalking-ui
[INFO] npm ERR! code EACCES
[INFO] npm ERR! syscall mkdir
[INFO] npm ERR! path /Users/xxx/.npm/_cacache/content-v2/sha512/c5/80
[INFO] npm ERR! errno -13

在这里插入图片描述

处理方式

根据提供的错误信息 npm ERR! code EACCES 和 npm ERR! syscall mkdir,这表明在尝试创建目录时发生了权限访问错误。

这个问题通常是由以下几个原因导致的:

(1)权限不足: 您可能没有足够的权限在指定的目录下创建文件或目录。请检查您是否具有足够的权限执行该操作。

(2)缓存目录权限问题: npm 使用了缓存目录来存储下载的包和依赖项。如果缓存目录的权限设置不正确,可能会导致无法在其中创建文件或目录。

为了解决这个问题,您可以尝试以下步骤:

确认您具有在该目录下创建文件和目录的权限。您可以尝试使用管理员或超级用户权限运行命令,或者联系系统管理员以获取适当的权限。

检查缓存目录的权限设置。您可以尝试更改缓存目录的权限,使其可写入。缓存目录的默认路径可能因操作系统和 npm 版本而异,常见的路径包括:

macOS/Linux: /Users/xuenan/.npm 或 /home/xuenan/.npm
Windows: C:\Users\xuenan.npm
您可以尝试在终端或命令提示符中运行以下命令,更改缓存目录的权限(以 macOS/Linux 为例):

sudo chown -R $(whoami) /Users/xuenan/.npm
这将将缓存目录的所有权更改为当前用户,使其具有读写权限。请注意,根据实际情况修改路径和命令。

如果您使用了代理服务器,请确保代理服务器的配置正确,并且没有阻止对 https://registry.npmjs.org/ 的访问。

如果问题仍然存在,请提供更多的错误日志和相关配置信息,以便我们能够更好地帮助您解决问题。

最终确认 其实是 缓存目录权限问题 。按照上面 gpt 的回复进行处理成功通过

maven-compiler-plugin编译失败

问题描述

执行 ./mvnw clean package -Dmaven.test.skip 时出现 一些编译上的问题
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project agent-analyzer: Compilation failure: Compilation failure:
[ERROR] /Users/zxn/Documents/meitu/skywalking/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/jvm/JVMSourceDispatcher.java:[104,23] 找不到符号
[ERROR] 符号: 方法 getPhrase()
[ERROR] 位置: 类型为org.apache.skywalking.apm.network.language.agent.v3.GC的变量 gc
[ERROR] /Users/zxn/Documents/meitu/skywalking/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/jvm/JVMSourceDispatcher.java:[105,22] 找不到符号
[ERROR] 符号: 变量 NEW
[ERROR] 位置: 类 org.apache.skywalking.oap.server.analyzer.provider.jvm.JVMSourceDispatcher
[ERROR] /Users/zxn/Documents/meitu/skywalking/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/jvm/JVMSourceDispatcher.java:[108,22] 找不到符号
[ERROR] 符号: 变量 OLD
[ERROR] 位置: 类 org.apache.skywalking.oap.server.analyzer.provider.jvm.JVMSourceDispatcher
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn -rf :agent-analyzer

在这里插入图片描述

处理方式

未执行初始化模块和更新模块,先执行这两个命令

git submodule init
git submodule update

在这里插入图片描述

./startup.sh执行失败

问题描述
进入到 skywalking/dist/apache-skywalking-apm-bin/bin 目录,执行 ./startup.sh 命令,出现命令找不到、目录、文件找不到的问题
command not found16:
command not found18:
command not found23:
No such file or directory
command not found25:
No such file or directory

在这里插入图片描述

处理方式

比较 startup.sh 与官方的 startup.sh 大小发现不一样。使用编译器查看 startup.sh 文件的 发现它的换行符是windows格式,而官方的是Unix格式。所以将 startup.sh、oapService.sh、webappService.sh 更改为 Unix格式就可以了。

在这里插入图片描述

这里提供另一种更改换行符格式的方法,采用dos2unix命令(如果没安装这个命令的通过 brew install dos2unix 安装)。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值