IDEA编译运行skywalking

SkyWalking是一个开源的APM系统,包括对Cloud Native架构分布式系统的监控、追踪、诊断能力。最近需要对skywalking做一些功能扩展,整理了一下在自己的idea上配置开发环境的步骤。以下记录过程并且整理思路,也参考了别人的方法:

基础环境:

jdk: 1.8+
maven: maven 3.5.2
git: 版本随意
IDE: intelliJ IDEA 2020.3
npm: 8.3.1
node: v16.14.0

构建项目:

1. clone代码

本次构建的是Skywalking的9.2.0

git clone https://github.com/apache/skywalking.git

2. 执行git命令

在_IntelliJIDEA_打开项目,设置本地maven,在Terminal命令窗口并输入命令
设置maven:
image.png
git命令:

git submodule init

git submodule update

submodule update这一步非常关键,大部分错误出在这一步。以上命令就是为了获取skywalking子模块的源码,子模块包括apm-network、query-graphql-plugin、skywalking-ui、e2e-ttl-es,具体的依赖信息可查看根目录的 .gitmodules文件:
image.png
执行git submodule update报错,或是没有任何反应都是不行的。很多时候因为网络原因,update的文件不全,我们就需要重新执行update命令,执行前,需要删除上面.gitmodules对应的path目录,重新执行命令让它重新下载。比如编译到apm-network这一步报错,往往是因为apm-protocol/apm-network/src/main/proto下的文件缺失,所以重新执行命令下载。
(当然还有个诀窍,就是手动去url链接的地址下载skywalking-data-collect-protocol的包,解压到对应path下也是可以的,这种方式可以避免因为网络而导致下载的问题)
另外一个比较容易出问题的是前端ui代码的下载(skywalking-booster-ui),网速不给力嘛,要么去手动下载,要么用clone代码的方式(通过更改.gitmodules文件中的url也是一种方法)。

3. 编译

推荐使用skywalking源码中自带的mvnw命令

./mvnw compile -DskipTests
##也可以直接执行package打包下,测试下自己环境能否成功打包发布:
./mvnw package -Dmaven.test.skip=true

这个在m1\m2的mac下不适用,会报下面的错误:

[ERROR] Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.6.1:compile (grpc-build) on project apm-network: Unable to resolve artifact: Missing:
[ERROR] ----------
[ERROR] 1) com.google.protobuf:protoc:exe:osx-aarch_64:3.12.0
[ERROR]
[ERROR]   Try downloading the file manually from the project website.
[ERROR]
[ERROR]   Then, install it using the command:
[ERROR]       mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.12.0 -Dclassifier=osx-aarch_64 -Dpackaging=exe -Dfile=/path/to/file
[ERROR]
[ERROR]   Alternatively, if you host your own repository you can deploy the file there:
[ERROR]       mvn deploy:deploy-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.12.0 -Dclassifier=osx-aarch_64 -Dpackaging=exe -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
[ERROR]
[ERROR]   Path to dependency:
[ERROR]         1) org.apache.skywalking:apm-network:jar:8.4.0-SNAPSHOT
[ERROR]         2) com.google.protobuf:protoc:exe:osx-aarch_64:3.12.0
[ERROR]
[ERROR] ----------
[ERROR] 1 required artifact is missing.

mac m1\m2使用如下命名:

./mvnw clean package -DskipTests -Dos.detected.classifier=osx-x86_64

或者IDEA中使用maven插件配置虚拟机引数(VM Options)
image.png
编译到后面看到一个个的SUCCESS就表示成功了。
image.png

运行项目:

1、生成源码配置

image.png
得益于IDEA的智能识别配置,编译生成的源码已经配置好了,不需要我们额外操作。如果idea没这么智能,参考官方文档配置这些源码包
image.png

2、配置文件修改

持久数据库默认h2,设置为es:
image.png

3、运行

运行OAP的server启动类,在oap-server模块下的server-starter模块
image.png
运行web启动类,在apm-webapp模块
image.png

如果需要调试前端。可以进行ui项目的配置,在IntelliJIDEA打开Terminal命令窗口并输入命令

cd cd skywalking-ui
npm install
#运行,后端的web服务提前停掉,只运行一个OAP server就行,后端的web就是个网关,把请求转发到oap上,这里前端默认配置直接请求oap的端口
npm run serve

4、验证

访问:http://localhost:8080/,出现如下,说明启动完成:
image.png

常见问题处理:

1. 提示缺少部分类

执行mvnw clean package -DskipTests失败,提示缺少部分类,例如缺少类KeyStringValuePair.java

[ERROR] /Users/terry/Gits/agent/skywalking/skywalking-github/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/command/TraceIgnoreCommand.java:[39,48] 找不到符号
[ERROR]   符号:   变量 KeyStringValuePair
[ERROR]   位置: 类 org.apache.skywalking.apm.network.trace.component.command.TraceIgnoreCommand
[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 <goals> -rf :apm-network

缺类的情况很常见,原因是因为前面提到的git submodule update没有更新到submodule,解决方法就是看报的哪个模块,比如这是报的apm-protocol/apm-network,到.gitmodules中找到对应模块源码的路径.删除对应的目录,重新 git submodule update,或者按前面说的方法,手动去下载源码吧。

2. npm install报错:

[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.6:
npm (npm install) on project apm-webapp: Failed to run task: 'npm install --
registry=https://registry.npmjs.org/' failed. org.apache.commons.exec.ExecuteException:
 Process exited with an error: -4048 (Exit value: -4048) -> [Help 1]

碰到这个错,很多人会想到是不是https://registry.npmjs.org/ 的问题,就想改成国内的_https://registry.npm_.taobao._org _,结果还是报错,其实只要这个网址是通的,就无所谓改成什么。之所以报错,就是前面提到git submodule update,这一步是UI的构建,不成功无非就是UI源码没下载好,或是node没下载好,node的版本是由apm-webapp\pom.xml决定的:
image.png
最重要的一点,还不是下载的问题,而是在npm install过程中下载node_modules的插件就出错了,所以UI的构建如果总是不成功,我们也可以独立出来,通过cnpm install也是可以的,关键是要能将vue.js编译生成dist文件:
image.png
独立编译成的UI dist文件,也是可以放到apm-webapp中打包的,可以将上图dist中的文件拷贝到apm-webapp\target\classes\public下,然后修改apm-webapp\pom.xml,将npm install和build过程都注释了,这样就实现了独立构建的skywalking-ui结果文件放到整体包中一起打包。
image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值