1 - 常见问题列表
问题 1-1:模块 compile 引入 springboot 依赖,模块安装时报错
java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : com.alipay.sofa.serverless.common.spring.ServerlessApplicationListener
解决方式
模块需要做好瘦身,参考这里:模块瘦身
问题 1-2:模块安装找不到 ServerlessApplicationListener
报错信息如下:
com.alipay.sofa.ark.exception.ArkLoaderException: [ArkBiz Loader] module1:1.0-SNAPSHOT : can not load class: com.alipay.sofa.serverless.common.spring.ServerlessApplicationListener
解决方式
请在模块里面添加如下依赖:
<dependency>
<groupId>com.alipay.sofa.serverless</igroupId>
<artifactId>sofa-serverless-app-starter</artifactId>
<version>0.5.5</version>
</dependency>
或者升级 sofa-serverless 版本到最新版本
问题 1-3: 通过 go install 无法安装 arkctl
执行如下命令,报错
go install serverless.alipay.com/sofa-serverless/v1/arkctl@latest
报错信息如下:
go: serverless.alipay.com/sofa-serverless/v1/arkctl@latest: module serverless.alipay.com/sofa-serverless/v1/arkctl: Get "https://proxy.golang.org/serverless.alipay.com/sofa-serverless/v1/arkctl/@v/list": dial tcp 142.251.42.241:443: i/o timeout
解决方式
arkctl 是作为 sofa-serverless 子目录的方式存在的,所以没法直接 go get,可以从这下面下载执行文件, 请参考安装 arkctl
问题 1-4:模块安装报 Master biz environment is null
解决方式,升级 sofa-serverless 版本到最新版本
<dependency>
<groupId>com.alipay.sofa.serverless</igroupId>
<artifactId>sofa-serverless-app-starter</artifactId>
<version>${最新版本号}</version>
</dependency>
问题 1-5:模块静态合并部署无法从制定的目录里找到模块包
解决方式,升级 sofa-serverless 版本到最新版本
<dependency>
<groupId>com.alipay.sofa.serverless</igroupId>
<artifactId>sofa-serverless-app-starter</artifactId>
<version>${最新版本号}</version>
</dependency>
2 - 如果模块独立引入 SpringBoot 框架部分会怎样?
由于多模块运行时的逻辑在基座引入和加载,例如一些 Spring 的 Listener。如果模块启动使用完全自己的 SpringBoot,则会出现一些类的转换或赋值判断失败,例如:
CreateSpringFactoriesInstances
name = ‘com.alipay.sofa.ark.springboot.listener.ArkApplicationStartListener’, ClassUtils.forName 获取到的是从基座 ClassLoader 的类
而 type 是模块启动时加载的,也就是使用模块 BizClassLoader 加载。
此时这里做 isAssignable 判断,则会报错。
Cannot instantiate interface org.springframework.context.ApplicationListener : com.alipay.sofa.ark.springboot.listener.ArkApplicationStartListener
所以模块框架这部分需要委托给基座加载。