---
title: "Solon v4.x 更新与兼容说明"
---

### 1、纪年

* v0: 2018 ~ 2019 (2y)
* v1: 2020 ~ 2022 (3y)
* v2: 2023 ~ 2024 (2y)
* v3: 2024 ~ 2026 (1.5y)
* v4: 2026 ~ 

### 2、v3.x 升到 v4.x 提醒

* 提醒1：之前没有使用弃用接口的，可以直接升级 <br>
* 提醒2：有使用弃用接口的。建议先升级到 3.10.7；替换弃用代码后，再升级到 4.0.0


<mark>总体思考是：移除弃用方法或类。总体变化不大。其中，solon ai 体系变化较大（skill 概念改为 talent）</mark>


### 3、更新说明（更详细内容见后面的“附件”）


for solon 生态：

* 新增 mcp-json-jackson2
* 新增 solon-view-aifei-enjoy 插件
* 新增 solon-cache-caffeine3 插件
* 新增 solon-ai-talent-gateway（由 solon-ai-skill-restapi 和 solon-ai-skill-toolgateway 合并而来）
* 新增 solon-ai-talent-mount 才能插件
* 添加 solon `ScopeLocal.getOr(Supplier)` 方法
* 添加 solon `AppContext.resolvePlaceholders` 方法
* 添加 solon-config-snack4 开放属性序列化的 Options 定制支持
* 添加 solon-flow FlowContext.data(), serData() 方法（vars, serVars 标为弃用）
* 调整 solon-cache-caffeine 增加 md5 控制、默认时间、缓存头控制支持
* 调整 solon-cache-xxx enableMd5key 默认为 false 
* 调整 solon Utils.annoAlias 标为弃用（由 Utils.valueOr 替代）
* 移除 solon-flow FlowContext.model() 方法 //.vars()
* 移除 solon-flow Link.condition 方法 //.when
* 移除 solon-expression StandardContext 类
* 修复 solon-serialization-snack4 Snack4StringSerializer.name 为 “snack4-json”
* eggg 升为 1.1.3
* snack4 升为 4.0.52
* liquor 升为 1.6.8
* socketd 升为 2.6.0
* folkmq 升为 1.8.0
* asm 升为 9.10
* lombok 升为 1.18.46
* slf4j 升为 2.0.18
* log4j 升为 2.26.0
* junit5 升为 5.14.4
* hutool 升为 5.8.44
* snakeyaml 升为 2.6
* fastjson2 升为 2.0.62
* jackson2 升为 2.21.4
* gson 升为 2.14.0
* redisson 升为 3.52.0
* lettuce 升为 6.8.2.RELEASE
* kafka 升为 3.9.2
* reactor-netty-http 升为 1.3.5
* netty 升为 4.1.134.Final
* smartsocket 升为 2.0.0
* smarthttp 升为 2.5.19
* vert.x 升为 4.5.27
* tomcat 升为 9.0.118
* undertow 升为 2.2.39.Final
* rocketmq5 升为 5.2.0
* nacos3 升为 3.2.1
* swagger 升为 1.6.16
* swagger2 升为 2.2.50
* undertow (for java17) 升为 2.3.24.Final
* jetty (for java17) 升为 12.1.9
* xxl-job-core3 (for java17) 升为 3.4.0
* jackson3 (for java17) 升为 3.1.3
* tomcat (for java17) 升为 11.0.22


for solon-ai 生成



* 变更 solon skill “概念”改为 solon talent（避免与 agent skill 的冲突）
* 新增 mcp-core（替换之前的 mcp-sdk，保持与官方相同命名）
* 新增 mcp-json-jackson2
* 新增 solon-ai-sandbox
* 新增 solon-ai-mcp MCP_2025_11_25 协议支持（支持 ServerTransportSecurityValidator 签权）
* 新增 solon-ai-talent-mount 才能插件（原 PoolManager 独立出来）
* 添加 solon-ai-talent-openapi OpenApiSkill.removeApi 方法
* 添加 solon-ai-talent-openapi ApiSource 超时配置支持
* 添加 solon-ai-talent-gateway McpGatewaySkill 专门处理 mcp（ToolGatewaySkill 可以处理所有工具）
* 添加 solon-ai-talent-cli TerminalTalent 系统级沙盒限制支持
* 添加 solon-ai-core ChatOptions:httpCustomize 方法
* 添加 solon-ai-core Talent::isEnabled 方法
* 添加 solon-ai-core AiConfig::standard（替代 provider 之前的作用）
* 添加 solon-ai-core ReActAgent::getModel 方法
* 添加 solon-ai-agent ReActInterceptor.onReasonStart 事件方法
* 添加 solon-ai-agent AgentTrace.getOriginalPrompt, getWorkingMemory 方法
* 添加 solon-ai-agent AgentTrace.getRunId 方法
* 添加 solon-ai-agent AgentChunk.getRunId 方法
* 添加 solon-ai-agent TeamAgent 添加初心标记
* 添加 solon-ai-agent ToolExchanger 类
* 添加 solon-ai-mcp McpClientProvider allowedTools, disallowedTools 工具控制机制
* 添加 solon-ai-harness bashAsyncEnabled 开关
* 添加 solon-ai-harness HarnessEngine.removeApi 方法
* 添加 solon-ai-harness HarnessProperties.mountPools 属性（替代 skillPools，后者标为弃用）
* 添加 solon-ai-harness 用 McpGatewaySkill 替换 ToolGatewaySkill（更有争对性）
* 优化 solon-ai-agent 初始化时（rest）添加快照持久化
* 优化 solon-ai-harness AgentFactory `edit` 权限添加 `read`、`write` 控制
* 优化 solon-ai-agent ContextCompressionInterceptor 压缩时机（从 onObservation 改为 onReasonStart），并增加系统词大小
* 优化 solon-ai-agent ContextCompressionInterceptor 增强上下文压缩拦截器中过期区 tool-use 原子序列的追溯保护，并完善文档注释
* 优化 solon-ai-agent ContextCompressionInterceptor 算法，增加 tools token
* 优化 solon-ai-dialect-openai OpenaiResponses 协议兼容性
* 调整 solon-ai-core 取消 ChatConfig.reasoningFieldName 配置（这个配置不合理）
* 调整 solon-ai-core 移除 SkillProvider 类
* 调整 solon-ai-core 移除 toolAdd(Object) 方法（指向不明，容易出错）
* 调整 solon-ai-core 移除 defaultToolAdd(Object) 方法（指向不明，容易出错）
* 调整 solon-ai-agent 移除 toolAdd(Object) 方法（指向不明，容易出错）
* 调整 solon-ai-agent 移除 defaultToolAdd(Object) 方法（指向不明，容易出错）
* 调整 solon-ai-mcp McpClientProperties 默认不启用心跳（之前默认为 30 心跳一次）
* 调整 solon-ai-mcp McpProviders 更名为 McpClientProviders
* 调整 solon-ai-agent ActionChunk：ActionChunk 更名为 ObservationChunk；ActionStartChunk 更名为 ActionChunk
* 调整 solon-ai-agent ReActInterceptor.onAction,onObservation: toolName,args,result 合并为 toolExchanger（并允许修改）
* 调整 solon-ai-agent ReActInterceptor.onReason 更名为 onReasonEnd（和 onReasonStart 凑成一对）
* 调整 solon-ai-agent ReActAgent.maxSteps 更名为 maxTurns（保持行业习惯）
* 调整 solon-ai-agent SummarizationInterceptor 更名为 ContextCompressionInterceptor（更符合语义）
* 调整 solon-ai-talent-cli PoolManager 实现细节，并添加 refresh(alias)
* 调整 solon-ai-talent-cli 技能标识由 aliasPath 统一改为 name，并优化技能池加载逻辑及代码格式
* 调整 solon-ai-talent-web WebfetchTool 更名为 WebfetchTalent; WebsearchTool 更名为 WebsearchTalent; CodeSearchTool 更名为 CodeSearchTalent
* 调整 solon-ai-talent-diff ApplyDiffTool 更名为 ApplyDiffTalent；ApplyPatchTool 更名为 ApplyPatchTalent
* 调整 solon-ai-harness HarnessEngine 打断与 HarnessProperties 关联（后者删除），避免耦合影响未来的调整
* 调整 solon-ai-harness HarnessEngine 移除 mainModel 字段（减兴缓存麻烦）
* 移除 solon-ai-skill-browser（包太大了，没必要）
* 移除 solon-ai-skill-restapi （由 solon-ai-talent-gateway 替代）
* 移除 solon-ai-skill-toolgateway （由 solon-ai-talent-gateway 替代）
* 移除 mcp-sdk（由 mcp-core 替代）
* 修复 solon-ai-mcp WebRxStreamableHttpTransport 没有 event 的消息会出错的问题（优化非规范兼容）
* 修复 solon-ai-mcp WebRxStreamableHttpTransport 没有 contentType 的消息会出错的问题（优化非规范兼容）
* 修复 solon-ai-agent ContextCompressionInterceptor 压缩后可能会引起 ToolMessage 无法对齐的问题
* mcp-sdk 升为 1.1.3





### 4、附件：弃用配置移除对应表（要认真核对）


移除

| 应用或插件 | 移除配置名 | | 替代配置名 |
| -------- | -------- | -------- | -------- |
|   solon-server                | `server.session.state.domain`            |       | `server.session.cookieDomain`     |
|                                    | `server.session.state.domain.auto`     |       | `server.session.cookieDomainAuto`     |
|   solon-web-staticfiles    | `solon.staticfiles.maxAge`                |       | `solon.staticfiles.cacheMaxAge`     |
|   nacos2-solon-cloud-plugin    | `solon.cloud.nacos2.*`                |       | `solon.cloud.nacos.*`     |


### 5、附件：弃用插件移除对应表（要认真核对）


移除（以下插件已由项目官方仓库维护，或者直接使用即可）

|  移除插件 | | 替代插件 |
| -------- | -------- | -------- | 
| `solon-ai-skill-*`  |   | `solon-ai-talent-*`  | 
| `easy-trans-solon-plugin`  |   | `com.fhs-opensource:easy-trans-solon-plugin`  | 
| `sms4j-solon-plugin`  |   |  `org.dromara.sms4j:sms4j-solon-plugin` | 
| `beetlsql-solon-plugin`  |   | `com.ibeetl:sql-solon-plugin`  | 
| `dbvisitor-solon-plugin`  |   | `net.hasor:dbvisitor-solon`  | 
| `sqltoy-solon-plugin`  |   |  `com.sagframe:sagacity-sqltoy-solon-plugin` | 
| `mybatis-sqlhelper-solon-plugin`  |   |  `com.github.fangjinuo.sqlhelper:sqlhelper-mybatis` | 
| `mybatis-pagehelper-solon-plugin`  |   | `com.github.pagehelper:pagehelper`  | 
| `mybatis-plus-solon-plugin`  |   | `com.baomidou:mybatis-plus-solon-plugin`  | 
| `mybatis-plus-extension-solon-plugin`  |   | 同上  | 
| `mybatis-flex-solon-plugin`  |   | `com.mybatis-flex:mybatis-flex-solon-plugin`  | 
| `fastmybatis-solon-plugin`  |   | `net.oschina.durcframework:fastmybatis-solon-plugin`  | 
| `bean-searcher-solon-plugin`  |   | `cn.zhxu:bean-searcher-solon-plugin`  | 
| `mybatis-tkmapper-solon-plugin`  |   | `tk.mybatis:mapper-solon-plugin`  | 
| `sa-token-solon-plugin`  |   | `cn.dev33:sa-token-solon-plugin`  | 
| `sa-token-snack4`  |   | 同上  | 
| `sa-token-dao-redisson-jackson`  |   |  同上  | 
| `liteflow-solon-plugin`  |   | `com.yomahub:liteflow-solon-plugin`  | 
| `forest-solon-plugin`  |   | `com.dtflys.forest:forest-solon-plugin`  | 


### 6、附件：弃用注解或属性移除对应表（会有编译提醒）

移除注解或属性

| 应用或插件 | 弃用注解或属性 | | 替代注解或属性 |
| -------- | -------- | -------- | -------- |
| solon      | `org.noear.solon.annotation::`     |      |      |
|              | `@Bean:priority()`          |      | `@Condition:priority()`    |
|              | `@Bean:injected()`          |      | `@Bean:autoInject()`    |
| solon-data      | `org.noear.solon.data.annotation::`     |      |      |
|              | `@Tran`          |      | `@Transaction`    |
| nami      | `org.noear.nami.annotation::`     |      |      |
|              | `@NamiBody:contentType()`          |      | `@NamiMapping:headers()`    |



### 7、附件：Solon 生态弃用类或方法移除对应表（会有编译提醒）

* solon 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon      | 包（`org.noear.solon`）      |      |      |
|              | `Solon:start(NvMap)`          |      | /     |
|              | `SolonApp:add*()`     |      | `SolonApp:router():add*()`     |
|              | `SolonApp:filter*()`     |      | `SolonApp:router():filter*()`     |
|              | `SolonApp:get*()`      |      | `SolonApp:router():get*()`     |
|              | `SolonApp:post*()`     |      | `SolonApp:router():post*()`     |
|              | `SolonApp:head*()`     |      | `SolonApp:router():head*()`     |
|              | `SolonApp:put*()`     |      | `SolonApp:router():put*()`     |
|              | `SolonApp:patch*()`     |      | `SolonApp:router():patch*()`     |
|              | `SolonApp:delete*()`     |      | `SolonApp:router():delete*()`     |
|              | `SolonApp:socketd*()`     |      | `SolonApp:router():socketd*()`     |
|              | `SolonApp:delete*()`     |      | `SolonApp:router():delete*()`     |
|              | `SolonApp:converterManager()`     |      | `SolonApp:converters()`     |
|              | `SolonApp:serializerManager()`     |      | `SolonApp:serializers()`     |
|              | `SolonApp:renderManager()`     |      | `SolonApp:renders()`     |
|              | `SolonApp:factoryManager()`     |      | `SolonApp:factories()`     |
|              | `SolonApp:renderManager()`     |      | `SolonApp:renders()`     |
|              | `SolonApp:chainManager()`     |      | `SolonApp:chains()`     |
|              | `SolonProps:plugs*()`          |      | `SolonProps:plugins*()`     |
|              | `SolonProps:plugsSort*()`          |      | /     |
|              | `SolonProps:isAloneMode*()`          |      | /     |
|              | `Utils:async*()`          |      | `RunUtil:async*()`     |
| solon      | 包（`org.noear.solon.util`）     |      |      |
|              | /          |      | `ScopeLocal:getOr`    |
| solon      | 包（`org.noear.solon.core`）      |      |      |
|              | `AppContext:methodGet`          |      | `AppContext:methodWrap`     |
|              | `AppContext:prestop`          |      | `AppContext:preStop`     |
|              | `BeanContainer:wrapPublish`          |      | `BeanContainer:beanPublish`     |
|              | `Constants:HEADER_CONTENT_TYPE_DEF`          |      | `MimeType.TEXT_PLAIN_UTF8_VALUE`     |
|              | `ChainManager:getInterceptorNodes`          |      | `ChainManager:getRouterInterceptorNodes`    |
|              | `ChainManager:addInterceptor`          |      | `ChainManager:addRouterInterceptor`    |
|              | `ChainManager:addInterceptorIfAbsent`          |      | `ChainManager:addRouterInterceptorIfAbsent`    |
|              | `ChainManager:removeInterceptor`          |      | `ChainManager:removeRouterInterceptor`    |
|              | `ChainManager:defExecuteHandler`          |      | `ChainManager:defEntityConverter`    |
|              | `ChainManager:addExecuteHandler`          |      | `ChainManager:addEntityConverter`    |
|              | `ChainManager:removeExecuteHandler`          |      | `ChainManager:removeEntityConverter`    |
|              | `ChainManager:getExecuteHandler`          |      | /   |
|              | `ChainManager:getExecuteHandlerDefault`          |      | /    |
|              | `FactoryManager:hasMvcFactory()`          |      | /    |
|              | `FactoryManager:mvcFactory()`          |      | /    |
|              | `FactoryManager:mvcFactory()`          |      | /    |
|              | `Plugin:prestop()`          |      | `Plugin:preStop()`     |
|              | `new Props(Map)`          |      | `new Props().addAll(Map)`     |
|              | `new Props(Iterable<KeyValues>)`          |      | `new Props().addAll(Iterable<KeyValues>)`     |
|              | `Props:getBean(..)`          |      | `Props:toBean(..)`     |
|              | `VarHolder:getGenericType()->ParameterizedType`          |      | `VarHolder:getGenericType()->Type`    |
|              | `NvMap`          |      | /     |
|              | `MvcFactory`          |      | /     |
|              | `LifecycleIndex`          |      | /     |
| solon      | 包（`org.noear.solon.core.handle`）      |      |      |
|              | `ActionArgumentResolver`          |      | `MethodArgumentResolver`     |
|              | `ActionExecuteHandler`          |      | /     |
|              | `ContextHolder`          |      | /     |
|              | `ContextUtil`          |      | /     |
|              | `EntityConverterFromExecutor`          |      | /     |
|              | `RenderFactory`          |      | /     |
| solon      | 包（`org.noear.solon.core.route`）      |      |      |
|              | `Router:getAll(..)`          |      | `Router:findAll(...)`     |
|              | `Router:getBy(..)`          |      | `Router:findBy(...)`     |
|              | `RouterWrapper`          |      | /    |
|              | `Routing:target()`          |      | `Routing:target(version2)`    |
|              | `RoutingTable:matchOne(..)`          |      | `RoutingTable:matchOne(..., version)`     |
|              | `RoutingTable:matchOneAndStatus(..)`          |      | `RoutingTable:matchOneAndStatus(..., version)`     |
|              | `RoutingTable:matchMore(..)`          |      | `RoutingTable:matchMore(..., version)`     |
| solon      | 包（`org.noear.solon.core.util`）      |      |      |
|              | `ClassUtil:findPublicMethods(..)`          |      | /     |
|              | `ClassUtil:scanClasses(.., Predicate<Class<?>>)`          |      | `ClassUtil:scanClasses(.., Consumer<Class<?>>)`     |
|              | `ResourceUtil:scanClasses(..)`          |      | `ClassUtil:scanClasses(...)`     |
|              | `ScanUtil:setScanner(..)`          |      | /     |
|              | `LogUtil`          |      | /     |
|              | `PathAnalyzer`          |      | PathMatcher     |
| solon      | 包（`org.noear.solon.core.wrap`）      |      |      |
|              | `VarSpec:getType`          |      | `VarSpec:getTypeEggg().getType`      |
|              | `VarSpec:getGenericType`          |      | `VarSpec:getTypeEggg().getGenericType`      |
|              | `VarSpec:isGenericType`          |      | `VarSpec:getTypeEggg().isParameterizedType`      |


* solon-handle 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-handle      | 包（`org.noear.solon.core.mvc`）      |      |      |
|              | `ActionExecuteHandlerDefault`          |      | `EntityConverterDefault`     |


* solon-data 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-data      | 包（`org.noear.solon.data.tran`）      |      |      |
|              | `TranManager:currentSet`          |      | `TranManager:with`    |
|              | `TranManager:currentRemove`    |      | `TranManager:with`     |
|              | `TranManager:trySuspend`          |      | `TranManager:with`     |
|              | `TranManager:tryResume`           |      | `TranManager:with`     |
| solon-data      | 包（`org.noear.solon.data.tran.interceptor`）      |      |      |
|              | `TranInterceptor`          |      | `TransactionInterceptor`     |


* solon-data-dynamicds 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-data-dynamicds      | 包（`org.noear.solon.data.dynamicds`）      |      |      |
|              | `DynamicDataSource:setCurrentKey`          |      | `DynamicDsKey:with`    |
|              | `DynamicDsKey:remove`          |      | `DynamicDsKey:with`      |
|              | `DynamicDsKey:use`           |      | `DynamicDsKey:with`      |
|              | `DynamicDsKey:getCurrent`           |      | `DynamicDsKey:with`      |
|              | `DynamicDsKey:setCurrent`           |      | `DynamicDsKey:with`      |
|              | `DynamicDsUtils`           |      | /     |




* solon-flow 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-flow      | 包（`org.noear.solon.flow`）      |      |      |
|              | `FlowContext:model()`          |      | `FlowContext:data()`    |
|              | `FlowContext:vars()`          |      | `FlowContext:data()`    |
|              | `Link:getCondition`          |      | `Link:getWhen`      |
|              | `LinkSpec:condition`           |      | `LinkSpec:when`      |




* solon-net-httputils 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-net-httputils      | 包（`org.noear.solon.net.http.textstream`）      |      |      |
|              | `ServerSentEvent:id()`          |      | `ServerSentEvent:getId()`    |
|              | `ServerSentEvent:event()`          |      | `ServerSentEvent:getEvent()`    |
|              | `ServerSentEvent:data()`          |      | `ServerSentEvent:getData()`    |
|              | `ServerSentEvent:retry()`          |      | `ServerSentEvent:getRetry()`    |
|              | `ServerSentEvent:comment()`          |      | `ServerSentEvent:getComment()`    |
|              | `TextStreamUtil:parseLineStream(.., subscriber)`          |      | `TextStreamUtil:parseLineStream(...)->Flux`    |
|              | `TextStreamUtil:parseSseStream(.., subscriber)`          |      | `TextStreamUtil:parseSseStream(...)->Flux`    |
| solon-net-httputils      | 包（`org.noear.solon.net.http`）      |      |      |
|              | `HttpExtensionManager`          |      | `HttpConfiguration`    |
|              | `HttpResponse:contentEncoding`          |      | `HttpResponse:contentCharset`    |
|              | `HttpUtils:execAsTextStream`          |      | `HttpUtils:execAsLineStream`    |
|              | `HttpUtils:execAsEventStream`          |      | `HttpUtils:execAsSseStream`    |
|              | `HttpUtils:bodyRaw`          |      | `HttpUtils:body`    |
|              | `HttpUtils:bodyTxt`          |      | `HttpUtils:bodyOfTxt`    |
|              | `HttpUtils:bodyJson`          |      | `HttpUtils:bodyOfJson`    |



* solon-statemachine 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-statemachine      | 包（`org.noear.solon.statemachine`）      |      |      |
|              | `Event`          |      | /     |
|              | `State`          |      | /     |


* solon-server 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-server      | 包（`org.noear.solon.server.ssl`）      |      |      |
|              | `SslContextFactory`          |      | `SslContextBuilder`     |
| solon-server      | 包（`org.noear.solon.server`）      |      |      |
|              | `ServerProps.request_useTempfile`          |      | /     |


* solon-serialization 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-serialization      | 包（`org.noear.solon.serialization.prop`）      |      |      |
|              | `JsonPropsUtil`          |      | /     |
| solon-serialization      | 包（`org.noear.solon.serialization`）      |      |      |
|              | `BytesSerializerRender`          |      | /     |
|              | `ContextSerializer`          |      | /     |
|              | `JsonRenderFactory`          |      | /     |
|              | `BytesSerializerRender`          |      | /     |
|              | `StringSerializerRender`          |      | /     |
| solon-serialization-abc      | 包（`org.noear.solon.serialization.abc`）      |      |      |
|              | `AbcActionExecutor`          |      | /     |
|              | `AbcRender`          |      | /     |
| solon-serialization-fastjson      | 包（`org.noear.solon.serialization.fastjson`）      |      |      |
|              | `FastjsonActionExecutor`          |      | /     |
|              | `FastjsonRenderFactory`          |      | /     |
|              | `FastjsonRenderFactoryBase`          |      | /     |
|              | `FastjsonRenderTypedFactory`          |      | /     |
| solon-serialization-fastjson2      | 包（`org.noear.solon.serialization.fastjson2`）      |      |      |
|              | `Fastjson2ActionExecutor`          |      | /     |
|              | `Fastjson2RenderFactory`          |      | /     |
|              | `Fastjson2RenderFactoryBase`          |      | /     |
|              | `Fastjson2RenderTypedFactory`          |      | /     |
| solon-serialization-fury      | 包（`org.noear.solon.serialization.fury`）      |      |      |
|              | `FuryActionExecutor`          |      | /     |
|              | `FuryRender`          |      | /     |
| solon-serialization-gson      | 包（`org.noear.solon.serialization.gson`）      |      |      |
|              | `GsonActionExecutor`          |      | /     |
|              | `GsonRenderFactory`          |      | /     |
|              | `GsonRenderFactoryBase`          |      | /     |
|              | `GsonRenderTypedFactory`          |      | /     |
| solon-serialization-hessian      | 包（`org.noear.solon.serialization.hessian`）      |      |      |
|              | `HessianActionExecutor`          |      | /     |
|              | `HessianRender`          |      | /     |
| solon-serialization-jackson      | 包（`org.noear.solon.serialization.jackson`）      |      |      |
|              | `JacksonActionExecutor`          |      | /     |
|              | `JacksonRenderFactory`          |      | /     |
|              | `JacksonRenderFactoryBase`          |      | /     |
|              | `JacksonRenderTypedFactory`          |      | /     |
| solon-serialization-jackson-xml      | 包（`org.noear.solon.serialization.jackson.xml`）      |      |      |
|              | `JacksonXmlActionExecutor`          |      | /     |
|              | `JacksonXmlRenderFactory`          |      | /     |
|              | `JacksonXmlRenderFactoryBase`          |      | /     |
|              | `JacksonXmlRenderTypedFactory`          |      | /     |
| solon-serialization-kryo      | 包（`org.noear.solon.serialization.kryo`）      |      |      |
|              | `KryoActionExecutor`          |      | /     |
|              | `KryoRender`          |      | /     |
| solon-serialization-properties      | 包（`org.noear.solon.serialization.properties`）      |      |      |
|              | `PropertiesActionExecutor`          |      | /     |
|              | `PropertiesRenderFactory`          |      | /     |
| solon-serialization-protostuff      | 包（`org.noear.solon.serialization.protostuff`）      |      |      |
|              | `ProtostuffActionExecutor`          |      | /     |
|              | `ProtostuffRender`          |      | /     |
| solon-serialization-snack3      | 包（`org.noear.solon.serialization.snack3`）      |      |      |
|              | `SnackActionExecutor`          |      | /     |
|              | `SnackRenderFactory`          |      | /     |
|              | `SnackRenderFactoryBase`          |      | /     |
|              | `SnackRenderTypedFactory`          |      | /     |




* solon-web 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-web-sse      | 包（`org.noear.solon.web.sse`）      |      |      |
|              | `SseEvent:build`          |      | `SseEvent:toString`     |




* solon-integration 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| dubbo3-solon-plugin      |  包（`org.noear.solon.extend.dubbo3`）     |      |      |
|                           | `EnableDubbo`          |      | `org.apache.dubbo.solon.annotation.EnableDubbo`     |
| dubbo-solon-plugin      |  包（`org.noear.solon.extend.dubbo`）     |      |      |
|                           | `EnableDubbo`          |      | `org.apache.dubbo.solon.annotation.EnableDubbo`     |
| redisson-solon-plugin      | 包（`org.redisson.solon`）       |      |      |
|                           | `RedissonSupplier`          |      | `RedissonClientOriginalSupplier`     |


* nami 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| nami      | 包（`org.noear.nami`）      |      |      |
|              | `EncoderTyped`          |      | /     |
|              | `NamiAttachment`          |      | `NamiAttach`     |
|              | `EncoderTyped`          |      | /     |
| nami      | 包（`org.noear.nami.common`）      |      |      |
|              | `Constants`          |      | `ContentTypes`     |
| nami-coder-fastjson      | 包（`org.noear.nami.coder.fastjson`）      |      |      |
|              | `FastjsonTypeEncoder`          |      | /    |
| nami-coder-fastjson2      | 包（`org.noear.nami.coder.fastjson2`）      |      |      |
|              | `Fastjson2TypeEncoder`          |      | /    |
| nami-coder-jackson      | 包（`org.noear.nami.coder.jackson`）      |      |      |
|              | `JacksonTypeEncoder`          |      | /    |
| nami-coder-snack3      | 包（`org.noear.nami.coder.snack3`）      |      |      |
|              | `SnackTypeEncoder`          |      | /    |




### 8、附件：Solon AI 生态弃用类或方法移除对应表（会有编译提醒）


* solon-ai-core 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-core      | 包（`org.noear.solon.ai.core`）      |      |      |
|              | `ChatMessage.template()`          |      | `ChatMessage.ofUserTmpl()`       |
|              | `ChatMessage.augment()`          |      | `ChatMessage.ofUserAugment()`       |
|              | `UserMessageTemplate.param()`          |      | `UserMessageTemplate.paramAdd()`       |
|              | `InMemoryChatSession:new(..,systemMessages)`          |      | /        |
|              | `InMemoryChatSession.Builder.systemMessages()`          |      | /      |
|              | `ToolCallResultConverter.matched()`          |      | /       |
|              | `ChatConfig.defaultToolsContext`           |      | `ChatConfig.defaultToolContext` （配置要注意）      |
|              | `ChatConfig.addDefaultTools()`               |      | `ChatConfig.addDefaultTool()`     |
|              | `ChatConfig.isDefaultAutoToolCall()`      |      | `ChatConfig.getModelOptions().isAutoToolCall()`      |
|              | `ChatConfig.getDefaultInterceptors()`      |      | `ChatConfig.getModelOptions().interceptors()`      |
|              | `ChatConfig.getDefaultToolContext()`      |      | `ChatConfig.getModelOptions().toolContext()`      |
|              | `ChatConfig.getDefaultSkills()`                |      | `ChatConfig.getModelOptions().skills()`      |
|              | `ChatConfig.getDefaultOptions()`                |      | `ChatConfig.getModelOptions().options()`      |
|              | `ChatConfig.getDefaultTool()`                |      | `ChatConfig.getModelOptions().tool()`      |
|              | `ChatConfig.getDefaultTools()`                |      | `ChatConfig.getModelOptions().tools()`      |
|              | `ChatConfig.getDefaultToolsContext()`                |      | `ChatConfig.getModelOptions().toolContext()`      |
|              | `ChatModel.prompt(session)`          |      | /       |
|              | `ChatModel.defaultToolAdd(toolObj)`          |      | /       |
|              | `ChatOptions.optionAdd()`                |      | `ChatOptions.optionSet()`     |
|              | `ChatOptions.toolsAdd()`                |      | `ChatOptions.toolAdd()`     |
|              | `ChatOptions.toolsContext()`                |      | `ChatOptions.toolContext()`     |
|              | `ChatOptions.toolsAdd()`                |      | `ChatOptions.toolAdd()`     |
|              | `ChatSession.toNdjson()`                |      | `ChatMessage.toNdjson(session.getMessages())`     |
|              | `ChatSession.loadNdjson()`                |      | `ChatMessage.fromNdjson(ndjson, session::addMessage)`     |
|              | `ChatSessionDefault`                |      | /     |
|              | `EmbeddingOptions.optionAdd()`                |      | `EmbeddingOptions.optionSet()`     |
|              | `GenerateOptions.optionAdd()`                |      | `GenerateOptions.optionSet()`     |
|              | `RerankingOptions.optionAdd()`                |      | `RerankingOptions.optionSet()`     |
|              | `RepositoryStorable.asyncInsert()`                |      | `RepositoryStorable.asyncSave()`     |
|              | `RepositoryStorable.insert()`                |      | `RepositoryStorable.save()`     |
|              | `RepositoryStorable.delete()`                |      | `RepositoryStorable.deleteById()`     |
|              | `RepositoryStorable.exists()`                |      | `RepositoryStorable.existsById()`     |


* solon-ai-agent 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-agent      | 包（`org.noear.solon.ai.agent`）      |      |      |
|              | `ReActAgent.description()`          |      | `ReActAgent.role()`       |
|              | `ReActAgent.maxStepsExtensible()`          |      | `ReActAgent.autoRethink()`       |
|              | `ReActOptionsAmend.maxStepsExtensible()`          |      | `ReActOptionsAmend.autoRethink()`       |
|              | `ReActTrace.pending()`          |      | `AgentSession.pending()`        |
|              | `ReActTrace.isPending()`          |      | `AgentSession.isPending()`       |
|              | `ReActTrace.getPendingReason()`          |      | `AgentSession.getPendingReason()`       |
|              | `SimpleAgent.description()`          |      | `SimpleAgent.role()`       |
|              | `TeamAgent.description()`          |      | `TeamAgent.role()`       |
|              | `TeamTrace.pending()`          |      | `AgentSession.pending()`        |
|              | `TeamTrace.isPending()`          |      | `AgentSession.isPending()`       |
|              | `TeamTrace.getPendingReason()`          |      | `AgentSession.getPendingReason()`       |
|              | `SummarizationInterceptor`          |      | `ContextCompressionInterceptor`       |



* solon-ai-harness 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-harness      | 包（`org.noear.solon.ai.harness`）      |      |      |
|              | `HarnessFlags`          |      | /       |
|              | `HarnessProperties`          |      | /       |
|              | `HarnessEngine`          |      | 重构     |




* solon-ai-mcp 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-mcp      | 包（`org.noear.solon.ai.mcp`）      |      |      |
|              | `McpClientProperties.apiKey("xxx")`          |      | `.header("Authorization", "Bearer xxx")`       |
|              | `McpClientProperties.apiUrl()`          |      | `McpClientProperties.url()`       |
|              | `McpClientProvider.Builder.apiUrl()`          |      | `McpClientProvider.Builder.url()`       |
|              | `McpClientProvider.Builder.apiKey()`          |      | `McpClientProvider.Builder.header("Authorization", "Bearer xxx")`       |
|              | `McpClientProvider.Builder.headerSet()`          |      | `McpClientProvider.Builder.header()`       |
|              | `McpClientProvider.Builder.serverParameters()`          |      | `McpClientProvider.Builder.command()`       |
|              | `McpServerParameters.Builder`          |      | /       |


* solon-ai-repo 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-repo-dashvector      | 包（`org.noear.solon.ai.rag.repository`）      |      |      |
|              | `DashVectorRepository.metadataIndexFields()`          |      | `DashVectorRepository.metadataFields()`       |
| solon-ai-repo-redis      | 包（`org.noear.solon.ai.rag.repository`）      |      |      |
|              | `RedisRepository.metadataIndexFields()`          |      | `RedisRepository.metadataFields()`       |

