标准 Windows 编译步骤
1. 克隆 SkyWalking
git clone https://github.com/apache/skywalking.git
cd skywalking
git submodule update --init --recursive
2. 编译(带 UI)
mvn clean package -DskipTests
然后就会在
D:\IdeaProjects\skywalking-full\dist中生成一个
apache-skywalking-apm-bin.tar.gz的文件
解压缩后目录结构如下:
├─bin
├─config
│ ├─cilium-rules
│ ├─envoy-metrics-rules
│ ├─lal
│ ├─log-mal-rules
│ ├─meter-analyzer-config
│ ├─oal
│ ├─openapi-definitions
│ │ └─serviceA
│ ├─otel-rules
│ │ ├─activemq
│ │ ├─aws-dynamodb
│ │ ├─aws-eks
│ │ ├─aws-gateway
│ │ ├─aws-s3
│ │ ├─banyandb
│ │ ├─bookkeeper
│ │ ├─clickhouse
│ │ ├─elasticsearch
│ │ ├─flink
│ │ ├─k8s
│ │ ├─kafka
│ │ ├─kong
│ │ ├─mongodb
│ │ ├─mysql
│ │ ├─nginx
│ │ ├─postgresql
│ │ ├─pulsar
│ │ ├─rabbitmq
│ │ ├─redis
│ │ └─rocketmq
│ ├─telegraf-rules
│ ├─ui-initialized-templates
│ │ ├─activemq
│ │ ├─apisix
│ │ ├─aws_dynamodb
│ │ ├─aws_eks
│ │ ├─aws_gateway
│ │ ├─aws_s3
│ │ ├─banyandb
│ │ ├─bookkeeper
│ │ ├─browser
│ │ ├─cilium_service
│ │ ├─clickhouse
│ │ ├─custom
│ │ ├─elasticsearch
│ │ ├─flink
│ │ ├─general
│ │ ├─k8s
│ │ ├─k8s_service
│ │ ├─kafka
│ │ ├─kong
│ │ ├─mesh
│ │ ├─mesh_cp
│ │ ├─mesh_dp
│ │ ├─mongodb
│ │ ├─mysql
│ │ ├─nginx
│ │ ├─os_linux
│ │ ├─os_windows
│ │ ├─postgresql
│ │ ├─pulsar
│ │ ├─rabbitmq
│ │ ├─redis
│ │ ├─rocketmq
│ │ ├─so11y_go_agent
│ │ ├─so11y_java_agent
│ │ ├─so11y_oap
│ │ ├─so11y_satellite
│ │ ├─virtual_cache
│ │ ├─virtual_database
│ │ └─virtual_mq
│ └─zabbix-rules
├─config-examples
├─licenses
│ └─ui-licenses
├─logs
├─oap-libs
├─tools
│ ├─data-generator
│ │ ├─bin
│ │ └─config
│ └─profile-exporter
└─webapp
然后去bin中运行oapService.bat结果就不行了,因为没有配置数据库
试了推荐的h2,不好用,因为已经移除了,另外sqlite的也被移除了,如果想用最好降低版本
| storage | 在 10.4.0 中支持? |
|---|---|
| h2 | ❌ 已被删除 |
| sqlite | ❌ 已被删除 |
| elasticsearch | ✅ 支持(推荐) |
| banyandb | ✅ 支持 |
如果你必须用 SQLite(开发轻量环境),请退回到 SkyWalking 10.2.0
本机正好有mysql 8.0.30,就试一下,下载地址https://dev.mysql.com/downloads/
改进D:\IdeaProjects\skywalking-full\dist\apache-skywalking-apm-bin\config\application.yml
storage:
selector: mysql
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true&allowMultiQueries=true"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:你的数据库密码}
dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}
并下载 https://downloads.mysql.com/archives/c-j/中的库,解压缩
把mysql-connector-java-8.0.30.jar放到
D:\IdeaProjects\skywalking-full\dist\apache-skywalking-apm-bin\oap-libs
配置好后,使用mysql命令行
CREATE DATABASE swtest CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
如果不创建上面的数据库表, HikariCP 连接池初始化失败,OAP 直接退出。
另外下载一个mysql可视化的软件
如果有什么错,看一下dist\apache-skywalking-apm-bin\logs中的
skywalking-oap-server.log
如果这个窗口一直不关就是成功 了,另外上面日志没有啥堆栈错误基本就可以了,

然后运行webappService.bat

然后访问localhost:8080就出来了

针对apm-protocol/apm-network模块的处理方法,
清空 SkyWalking apm-network 模块的 target/ 目录有 3 种稳定方式,其中 最推荐的是使用 Maven clean,不会误删其它内容。
✅ 方法 1 ------ Maven 官方、最标准方式(推荐)
进入 SkyWalking 根目录执行:
mvn -pl apm-protocol/apm-network clean
作用:
✔ 只清理 apm-network
✔ 删除整个 target/ 目录
✔ 同步清除生成的 Java 代码、class、编译缓存
✘ 不会影响其他模块
非常安全 → 最常用于改 .proto 后重编。
✅ 方法 2 ------ 进入模块目录执行 clean
cd apm-protocol/apm-network
mvn clean
效果完全相同:
rm -rf apm-protocol/apm-network/target/
⚡ 方法 3 ------ 手动删除(Linux 或 WSL)
rm -rf apm-protocol/apm-network/target
或 Windows PowerShell:
Remove-Item -Recurse -Force apm-protocol\apm-network\target
⚠ 手动删除适用于目录被占用无法 clean 时。
mvn -pl 是 Maven 中非常重要的参数,作用是:
👉 -pl = --projects 表示"只构建某些模块(project list)"
简单说,它允许你在多模块项目中 指定某一个或多个模块单独构建,而不是编译整个工程。
如重新生成apm-protocol/apm-network/target下的代码,使用
mvn -pl apm-protocol/apm-network compile
就会重新生成target代码

上面执行的clean ,compile是和双击右边的mvn对应选项是等效的

另外双击后在命令行窗口中看到的命令就是实际执行的,

把下面这个复制到 cmd的终端中也可以编译了
下面的是compile指令
C:\jdk-17\bin\java.exe -Dmaven.multiModuleProjectDirectory=D:\IdeaProjects\skywalking-full -Djansi.passthrough=true -Dmaven.home=C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4 -Dclassworlds.conf=C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4\bin\m2.conf "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA 2025.1.4.1\plugins\maven\lib\maven-event-listener.jar" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2025.1.4.1\lib\idea_rt.jar=57095" -Dfile.encoding=UTF-8 -classpath C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4\boot\plexus-classworlds-2.6.0.jar;C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4\boot\plexus-classworlds.license org.codehaus.classworlds.Launcher -Didea.version=2025.1.4.1 compile
下面的是clean指令
C:\jdk-17\bin\java.exe -Dmaven.multiModuleProjectDirectory=D:\IdeaProjects\skywalking-full -Djansi.passthrough=true -Dmaven.home=C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4 -Dclassworlds.conf=C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4\bin\m2.conf "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA 2025.1.4.1\plugins\maven\lib\maven-event-listener.jar" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2025.1.4.1\lib\idea_rt.jar=55909" -Dfile.encoding=UTF-8 -classpath C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4\boot\plexus-classworlds-2.6.0.jar;C:\Users\VISION16Pro\.m2\wrapper\dists\apache-maven-3.8.4-bin\52ccbt68d252mdldqsfsn03jlf\apache-maven-3.8.4\boot\plexus-classworlds.license org.codehaus.classworlds.Launcher -Didea.version=2025.1.4.1 clean
