@stalfh233/omc-cli 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -35,6 +35,81 @@ AI-Platform 1.1.25(8.7 时代)已实测(2026-11-03)。
|
|
|
35
35
|
|
|
36
36
|
先按 cpdocs 的落点判据定「配置 / 二开」;判到二开时,再用上表在两种 Java 落点间选。
|
|
37
37
|
|
|
38
|
+
## 0.1 在线编码的能力边界(实测,1.1.25)
|
|
39
|
+
|
|
40
|
+
在线编码**不是一个工程,是单文件 Handler**。平台契约就是「一条规则 = 一个 `content`
|
|
41
|
+
字符串 = 一个 `.java` 文件」,没有多文件、没有模块、看不见你的工程代码。这个边界
|
|
42
|
+
决定了很多事能不能做。
|
|
43
|
+
|
|
44
|
+
### 源码形态
|
|
45
|
+
|
|
46
|
+
| 能做 | 不能做 |
|
|
47
|
+
|---|---|
|
|
48
|
+
| **1 个 public 类**(必须 `schemaCode+ruleCode+Handler`) | 第 2 个 public 类(`should be declared in a file named X.java`) |
|
|
49
|
+
| 多个 package-private 顶层类(实测 5 个无问题) | — |
|
|
50
|
+
| 内部类 / 静态嵌套 / 匿名类 / lambda / stream | 顶层 `static class` |
|
|
51
|
+
| 同文件 `enum` / `interface` / `@interface`(非 public) | — |
|
|
52
|
+
| `import a.b.*` 通配符、`import static` | — |
|
|
53
|
+
|
|
54
|
+
### 语言级别:Java 8
|
|
55
|
+
|
|
56
|
+
| 语法 | 结果 |
|
|
57
|
+
|---|---|
|
|
58
|
+
| lambda / stream / 匿名类 | ✅ |
|
|
59
|
+
| `var` | ❌ `cannot find symbol` |
|
|
60
|
+
| `record` | ❌ `class, interface, or enum expected` |
|
|
61
|
+
| 文本块 `"""` | ❌ `';' expected` |
|
|
62
|
+
| switch 表达式 `case 1 ->` | ❌ |
|
|
63
|
+
|
|
64
|
+
**坑**:平台上挂着 Lombok 注解处理器但**它初始化失败**
|
|
65
|
+
(`NoClassDefFoundError: com/sun/tools/javac/processing/JavacProcessingEnvironment`),
|
|
66
|
+
所以用 Java 8 之后的语法时,错误里会先出现一坨 Lombok 异常,真正的
|
|
67
|
+
`cannot find symbol` 排在后面。**看错误先看最后一条**,别被 Lombok 噪音带偏。
|
|
68
|
+
Lombok 的代码生成也**不可用**(`@Data` 生成的方法找不到),老老实实手写 getter/setter
|
|
69
|
+
和 `LoggerFactory.getLogger(...)`。
|
|
70
|
+
|
|
71
|
+
### 可用依赖
|
|
72
|
+
|
|
73
|
+
| 可用 | 不可用 |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `java.lang/math/util/io` + wildcard / static import | Jakarta EE(`jakarta.*`) |
|
|
76
|
+
| `engine.open.*`(OpenEngine / BizObject / BizObjectQuery / FilterExpression) | **大部分 `engine.api.facade/model.*`**(包不存在) |
|
|
77
|
+
| `engine.ErrorCode`、`engine.api.historical.*` | **`engine.service.*`**(平台内部 Service 不可见) |
|
|
78
|
+
| commons-lang3 / fastjson / guava / hutool / slf4j | **工程自有包**(`app.modules.*` 编不过) |
|
|
79
|
+
| `javax.annotation` / `javax.servlet` | 额外第三方 jar(不在 launcher 类路径上) |
|
|
80
|
+
| Spring 注解(能编译) | **Spring 运行时**(规则每次重新实例化,无容器上下文;不要注册 Bean) |
|
|
81
|
+
|
|
82
|
+
**别按平台的「补全白名单」写代码**:白名单列了 `engine.api.*` / `engine.domain.*` /
|
|
83
|
+
`engine.service.*`,但**白名单 ≠ javac 类路径**——白名单里很多类实际编不过。以
|
|
84
|
+
`engine.open.*` 为准,拿不准就先 `programming.compile` 试一次(只读,不落库)。
|
|
85
|
+
|
|
86
|
+
### 运行时约束
|
|
87
|
+
|
|
88
|
+
| 项 | 值 | 说明 |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| 执行超时 | **600s**(默认) | `cloudpivot.online-develop.thread-overtime` |
|
|
91
|
+
| 最大栈深 | 50 | 递归要小心 |
|
|
92
|
+
| 字符串常量 | ≤ 64KB | 超过报 `constant string too long`;文件本身几十 KB 没问题 |
|
|
93
|
+
| 编译产物目录 | `<launcher>/inject_code_dir` | 无写权限 → publish 成功但执行 50000 |
|
|
94
|
+
| 生命周期 | 每次执行重新实例化 | 无状态、不能常驻、不能注册 Bean |
|
|
95
|
+
| 并发/事务 | 跑在平台保存调用内 | 别在里面起线程或长事务 |
|
|
96
|
+
|
|
97
|
+
### 必须退回本地扩展包的场景
|
|
98
|
+
|
|
99
|
+
出现任一条就**不是**在线编码能解决的,别硬塞:
|
|
100
|
+
|
|
101
|
+
1. 要对外开 **REST 接口**
|
|
102
|
+
2. 要接 **SPI / 平台扩展点**(单据号、消息、流程监听、适配器、模型校验…)
|
|
103
|
+
3. 要 **Spring 托管 / 拦截器 / 全局异常 / 多 Bean 协作**
|
|
104
|
+
4. 要**复用工程内自己的类或工具库**(在线编码看不见它们)
|
|
105
|
+
5. 要<strong>引额外第三方 jar</strong>(launcher 类路径上没有)
|
|
106
|
+
6. 要 **Java > 8 语法 / Lombok 代码生成**
|
|
107
|
+
7. 要**多条规则共享同一套工具方法**——在线编码没有跨规则复用,只能各文件复制;
|
|
108
|
+
一旦出现「三处以上重复」,转本地扩展包
|
|
109
|
+
|
|
110
|
+
反过来,**留在在线编码**:某个模型 Create/Update/Delete/Load/GetList/自定义规则时,
|
|
111
|
+
用 OpenEngine 做字段改写、补数、简单联动——publish 即生效。
|
|
112
|
+
|
|
38
113
|
## 1. 两种用法:单条 vs 工作区
|
|
39
114
|
|
|
40
115
|
### 单条(快速改一条规则)
|
|
@@ -136,9 +211,8 @@ cpdocs 提供**平台知识与规范**,本 CLI 提供**执行面**。已安装
|
|
|
136
211
|
推荐循环:**需求 → cpdocs 定落点与 API → `programming.get` 取模板 → 按 cpdocs 规范写 →
|
|
137
212
|
`compile` → `apply --publish` → `programming test` 断言 → (跨模型/对外接口才升到二开扩展包)**。
|
|
138
213
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
(规则每次执行重新实例化,无 Spring 上下文),也别把规则类注册成 Bean(内存泄漏)。
|
|
214
|
+
在线编码里能用什么依赖、什么语法、什么必须退回扩展包——见 [§0.1 能力边界](#01-在线编码的能力边界实测-1125)。
|
|
215
|
+
拿不准某个类能不能用,先 `programming.compile` 试一次(只读不落库),比猜快。
|
|
142
216
|
|
|
143
217
|
## 5. 典型 handler 骨架(已验证可编译可运行)
|
|
144
218
|
|