7.0.0升级详细说明及步骤

开发和运行环境服务升级

1. 安装JDK17

点击打开JDK17下载页面

根据本地开发系统环境选择合适的安装包进行下载并使用

注意事项:

  1. 安装jdk17
  2. JAVA_HOME/PATH 环境变量配置

2. RocketMQ 升级

推荐升级至 4.8.x 版本

点击下载4.8.0版本

注:若 RocketMQ 版本低于 4.8.x 版本,需进行升级,否则无法正常运行在 JDK17 环境中。

支持程度 RocketMQ 版本 关键说明
基础运行兼容 4.8.0+ 首次适配 JDK 9+ 核心运行环境,修复模块导出、反射限制等基础问题
完整特性兼容 4.9.0+ 解决 JDK 9+ 下的网络、线程、日志等细节兼容问题,生产环境可落地
官方明确标注支持 5.0.0+(5.x 全系列) 官网文档明确声明支持 JDK 8/11/17(9/10 属于过渡版本,间接兼容)

对于无法升级 RocketMQ 版本的环境,可通过修改 runserver.shrunbroker.sh 运行脚本进行适配。在使用 cmd 脚本的运行环境中,可通过修改 runserver.cmdrunbroker.cmd 运行脚本进行适配。

下面提供了基于 4.5.2 版本修改后的 runserver.shrunbroker.sh 脚本进行参考。
修改运行脚本仅适用于无法升级中间件版本的特殊环境,下面提供的修改后的脚本,只能保证收发消息功能正常,无法保证其他功能的正常使用。

核心变更内容:

  1. JAVA_OPT 配置使用 --add-opens 参数以支持非模块化内置包在运行代码中的使用。
  2. 移除 JDK17 不再支持的其他 JVM 参数。
runserver.sh
#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#===========================================================================================
# Java Environment Setting
#===========================================================================================
error_exit ()
{
    echo "ERROR: $1 !!"
    exit 1
}

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"

export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
export CLASSPATH=.:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}

#===========================================================================================
# JVM Configuration
#===========================================================================================
# The RAMDisk initializing size in MB on Darwin OS for gc-log
DIR_SIZE_IN_MB=600

choose_gc_log_directory()
{
    case "`uname`" in
        Darwin)
            if [ ! -d "/Volumes/RAMDisk" ]; then
                # create ram disk on Darwin systems as gc-log directory
                DEV=`hdiutil attach -nomount ram://$((2 * 1024 * DIR_SIZE_IN_MB))` > /dev/null
                diskutil eraseVolume HFS+ RAMDisk ${DEV} > /dev/null
                echo "Create RAMDisk /Volumes/RAMDisk for gc logging on Darwin OS."
            fi
            GC_LOG_DIR="/Volumes/RAMDisk"
        ;;
        *)
            # check if /dev/shm exists on other systems
            if [ -d "/dev/shm" ]; then
                GC_LOG_DIR="/dev/shm"
            else
                GC_LOG_DIR=${BASE_DIR}
            fi
        ;;
    esac
}

choose_gc_log_directory

# JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m \
    --add-opens=java.base/java.lang=ALL-UNNAMED \
    --add-opens=java.base/java.lang.annotation=ALL-UNNAMED \
    --add-opens=java.base/java.lang.constant=ALL-UNNAMED \
    --add-opens=java.base/java.lang.invoke=ALL-UNNAMED \
    --add-opens=java.base/java.lang.module=ALL-UNNAMED \
    --add-opens=java.base/java.lang.ref=ALL-UNNAMED \
    --add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
    --add-opens=java.base/java.lang.runtime=ALL-UNNAMED \
    --add-opens=java.base/java.io=ALL-UNNAMED \
    --add-opens=java.base/java.lang=ALL-UNNAMED \
    --add-opens=java.base/java.math=ALL-UNNAMED \
    --add-opens=java.base/java.net=ALL-UNNAMED \
    --add-opens=java.base/java.nio=ALL-UNNAMED \
    --add-opens=java.base/java.security=ALL-UNNAMED \
    --add-opens=java.base/java.text=ALL-UNNAMED \
    --add-opens=java.base/java.time=ALL-UNNAMED \
    --add-opens=java.base/java.util=ALL-UNNAMED \
    --add-opens=java.xml/com.sun.org.apache.xpath.internal.jaxp=ALL-UNNAMED \
    --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED \
    --add-opens=java.base/jdk.internal.access=ALL-UNNAMED"

# JAVA_OPT="${JAVA_OPT} -XX:+IgnoreUnrecognizedVMOptions -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -XX:+IgnoreUnrecognizedVMOptions -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
# JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log"
# JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
# JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
# JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

$JAVA ${JAVA_OPT} $@
runbroker.sh
#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#===========================================================================================
# Java Environment Setting
#===========================================================================================
error_exit ()
{
    echo "ERROR: $1 !!"
    exit 1
}

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"

export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
export CLASSPATH=.:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}

#===========================================================================================
# JVM Configuration
#===========================================================================================
# The RAMDisk initializing size in MB on Darwin OS for gc-log
DIR_SIZE_IN_MB=600

choose_gc_log_directory()
{
    case "`uname`" in
        Darwin)
            if [ ! -d "/Volumes/RAMDisk" ]; then
                # create ram disk on Darwin systems as gc-log directory
                DEV=`hdiutil attach -nomount ram://$((2 * 1024 * DIR_SIZE_IN_MB))` > /dev/null
                diskutil eraseVolume HFS+ RAMDisk ${DEV} > /dev/null
                echo "Create RAMDisk /Volumes/RAMDisk for gc logging on Darwin OS."
            fi
            GC_LOG_DIR="/Volumes/RAMDisk"
        ;;
        *)
            # check if /dev/shm exists on other systems
            if [ -d "/dev/shm" ]; then
                GC_LOG_DIR="/dev/shm"
            else
                GC_LOG_DIR=${BASE_DIR}
            fi
        ;;
    esac
}

choose_gc_log_directory

# JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g"
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g \
    --add-opens=java.base/java.lang=ALL-UNNAMED \
    --add-opens=java.base/java.lang.annotation=ALL-UNNAMED \
    --add-opens=java.base/java.lang.constant=ALL-UNNAMED \
    --add-opens=java.base/java.lang.invoke=ALL-UNNAMED \
    --add-opens=java.base/java.lang.module=ALL-UNNAMED \
    --add-opens=java.base/java.lang.ref=ALL-UNNAMED \
    --add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
    --add-opens=java.base/java.lang.runtime=ALL-UNNAMED \
    --add-opens=java.base/java.io=ALL-UNNAMED \
    --add-opens=java.base/java.lang=ALL-UNNAMED \
    --add-opens=java.base/java.math=ALL-UNNAMED \
    --add-opens=java.base/java.net=ALL-UNNAMED \
    --add-opens=java.base/java.nio=ALL-UNNAMED \
    --add-opens=java.base/java.security=ALL-UNNAMED \
    --add-opens=java.base/java.text=ALL-UNNAMED \
    --add-opens=java.base/java.time=ALL-UNNAMED \
    --add-opens=java.base/java.util=ALL-UNNAMED \
    --add-opens=java.xml/com.sun.org.apache.xpath.internal.jaxp=ALL-UNNAMED \
    --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED \
    --add-opens=java.base/jdk.internal.access=ALL-UNNAMED"

JAVA_OPT="${JAVA_OPT} -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
# JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log"
# JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
# JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
# JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

numactl --interleave=all pwd > /dev/null 2>&1
if [ $? -eq 0 ]
then
    if [ -z "$RMQ_NUMA_NODE" ] ; then
        numactl --interleave=all $JAVA ${JAVA_OPT} $@
    else
        numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@
    fi
else
    $JAVA ${JAVA_OPT} $@
fi

3. Zookeeper 升级

推荐升级至 3.9.x 版本

点击下载3.9.4版本

注: 若 Zookeeper 版本低于 3.6.x 版本,需进行升级,否则无法正常运行在 JDK17 环境中。

支持程度 ZooKeeper 版本 关键说明
基础运行兼容 3.6.0+ 首次修复 JDK 9+ 模块化、反射限制等核心问题,可运行但需手动适配启动参数
完整特性兼容 3.6.3+ 解决 JDK 9+ 下的日志、SSL、工具类等边缘场景兼容问题,生产环境可落地
官方明确标注支持 3.7.0+ / 3.8.0+ 官网文档明确声明支持 JDK 8/11(9/10 为过渡版本,间接兼容),移除老旧 JDK 依赖
LTS 版本最优选择 3.8.x(稳定版)/ 3.9.x 长期支持版本,完全适配 JDK 11/17(LTS),无额外兼容成本

代码升级

1. pom编译版本升级

将原有声明了 maven.compilerjava.version 相关参数进行修改

<!--
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
-->

<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<java.version>17</java.version>
<java.vendor>Oracle</java.vendor>

2. maven 编译插件升级

注: 按需选择升级,只要保证 install, package, deploy 等常用生命周期正常使用即可

<maven.compiler.version>3.14.0</maven.compiler.version>
<maven.surefire.version>3.5.3</maven.surefire.version>
<maven.source.version>3.3.1</maven.source.version>
<maven.install.version>3.1.4</maven.install.version>
<maven.deploy.version>3.1.4</maven.deploy.version>
<maven.war.version>3.4.0</maven.war.version>

3. 第三方版本升级(无需执行)

注: 此处不包含间接升级的第三方依赖,仅包含 Oinone 主动升级的第三方依赖。

<commons.lang3.version>3.18.0</commons.lang3.version>
<commons.collections4.version>4.5.0</commons.collections4.version>
<commons.beanutils.version>1.11.0</commons.beanutils.version>
<gson.version>2.13.1</gson.version>
<druid.version>1.2.25</druid.version>
<mybatis.version>3.5.19</mybatis.version>
<mybatis.spring.version>3.0.4</mybatis.spring.version>
<mybatis-plus.version>3.5.11</mybatis-plus.version>
<thymeleaf.version>3.1.3.RELEASE</thymeleaf.version>
<aspectj.version>1.9.24</aspectj.version>
<aspectjweaver.version>1.9.24</aspectjweaver.version>
<caffeine.version>3.2.2</caffeine.version>
<groovy.version>4.0.28</groovy.version>
<kryo.version>5.6.2</kryo.version>
<dubbo.version>3.2.18</dubbo.version>
<dubbo.extensions.version>3.3.1</dubbo.extensions.version>
<spring.boot.version>3.3.13</spring.boot.version>
<spring.cloud.version>2023.0.6</spring.cloud.version>
<spring.cloud.alibaba.version>2023.0.3.3</spring.cloud.alibaba.version>
<spring.cloud.nacos.version>2023.0.3.3</spring.cloud.nacos.version>
<spring.version>6.1.21</spring.version>
<atomikos.version>6.0.0</atomikos.version>
<jedis.version>5.0.2</jedis.version>
<httpclient.version>4.5.13</httpclient.version>
<minio.version>6.0.13</minio.version>
<okhttp.version>3.14.9</okhttp.version>
<org.junit5.platform.version>1.13.4</org.junit5.platform.version>
<org.junit5.jupiter.version>5.13.4</org.junit5.jupiter.version>
<org.junit5.vintage.version>5.13.4</org.junit5.vintage.version>
<junit4.version>4.13.2</junit4.version>
<jacoco.version>0.8.13</jacoco.version>

4. Oinone Bom 升级

注:7.x 版本继续保持原有依赖方式不变,仅需升级版本号即可完成 Oinone 平台升级。最新版本请参考更新日志

<oinone.version>7.0.1</oinone.version>

<dependency>
    <groupId>pro.shushi</groupId>
    <artifactId>oinone-bom</artifactId>
    <version>${oinone.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

5. 类引入路径变更

JDK 17 作为长期支持版,已完全移除内置的 Java EE 相关模块(JDK 9 开始模块化,JDK 11 彻底移除),因此升级时若依赖 Java EE 组件,会遇到 javax → jakarta 的包名变更问题。

下面列出了所有 Oinone 已知的类引入变更,可在项目中进行全局替换。其他未列出变更内容可参考文末的参考资料或自行搜索解决。

# javax.annotation.Resource
jakarta.annotation.Resource

# javax.annotation.PostConstruct
jakarta.annotation.PostConstruct

# javax.servlet.
jakarta.servlet.

# javax.validation.
jakarta.validation.

# javax.activation.
jakarta.activation.

# javax.mail.
jakarta.mail.

一些特殊情况:

  1. Oinone 7.x 首发版本未处理 Apache Camel 升级,导致通过 Exchange.HTTP_SERVLET_RESPONSE 变量获取 HttpServletResponse 值时需要使用 javax.servlet.http.HttpServletResponse 而不是 jakarta.servlet.http.HttpServletResponse

6. yaml 配置变更

核心变更内容:

  1. 移除 bootstrap.yml,使用新的 profiles 指定方式。
  2. 使用 spring.main.allow-circular-references=true 启用 Spring 循环依赖处理。
  3. Spring Data 相关配置升级,以 Redis 为例,配置前缀由 spring.redis 改为 spring.data.redis

具体变更步骤

  1. 移除 bootstrap.yml 改为使用 application.yml 作为公共配置。
application.yml
spring:
  profiles:
    active: dev
  main:
    allow-circular-references: true
  application:
    name: pamirs-demo
  cloud:
    service-registry:
      auto-registration:
        enabled: false
    config:
      enabled: false
      uri: http://127.0.0.1:7001
      label: master
      profile: dev
    nacos:
      server-addr: http://127.0.0.1:8848
      discovery:
        enabled: false
        namespace:
        prefix: application
        file-extension: yml
      config:
        enabled: false
        namespace:
        prefix: application
        file-extension: yml
dubbo:
  application:
    name: pamirs-demo
    version: 1.0.0
    register-consumer: false
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: -1
    serialization: pamirs
    payload: 104857600
  scan:
    base-packages: pro.shushi
  cloud:
    subscribed-services:
pamirs:
  default:
    environment-check: true
    tenant-check: true

变更要点:

  • spring.profiles.active 配置用于指定具体环境配置后缀,下面的配置示例指向 application-dev.yml 配置文件。
  • spring.main.allow-circular-references=true:Spring 不再主动处理循环依赖引用问题,需要显式启用,目前 Oinone 暂不支持关闭,未来会陆续支持。
  1. application-dev.yml 配置变更
# spring:
#   profiles: dev

spring:
  config:
    activate:
      on-profile: dev
  1. Redis 配置由 spring.redis 前缀改为 spring.data.redis 前缀,其他配置可参考官方文档
# spring:
#   redis:
#     database: 1
#     host: 127.0.0.1
#     port: 6379
#     timeout: 2000

spring:
  data:
    redis:
      database: 1
      host: 127.0.0.1
      port: 6379
      timeout: 2000

变更要点:

  • Oinone 7.x 开始将完整支持 org.springframework.boot.autoconfigure.data.redis.RedisProperties 未来所有变更将跟随 Spring Data Redis 升级而变化。

7. 类变更

类名或路径变更

pro.shushi.pamirs.framework.connectors.data.kv.RedisSimpleConfig -> pro.shushi.pamirs.framework.connectors.data.kv.PamirsRedisConfig
pro.shushi.pamirs.auth.api.extend.AuthPermissionCacheExtendApi -> pro.shushi.pamirs.auth.api.extend.cache.AuthPermissionCacheExtendApi
pro.shushi.pamirs.auth.api.extend.PermissionNodeConvertExtendApi -> pro.shushi.pamirs.auth.api.extend.load.PermissionNodeConvertExtendApi
pro.shushi.pamirs.auth.api.extend.PermissionNodeLoadExtendApi -> pro.shushi.pamirs.auth.api.extend.load.PermissionNodeLoadExtendApi

移除废弃类或方法

pro.shushi.pamirs.framework.connectors.data.kv.RedisClusterConfig
pro.shushi.pamirs.framework.connectors.data.kv.RedisClusterProperty
pro.shushi.pamirs.framework.connectors.data.kv.RedisConfig
pro.shushi.pamirs.framework.connectors.data.kv.RedisSentinelConfig
pro.shushi.pamirs.framework.connectors.data.kv.RedisSentinelProperty
pro.shushi.pamirs.auth.api.service.IRoleCustom
pro.shushi.pamirs.auth.api.runtime.holder.AuthVerificationApiHolder
pro.shushi.pamirs.auth.api.enmu.PermissionDataSourceEnum
pro.shushi.pamirs.auth.api.extend.load.PermissionNodeLoadExtendApi#buildRootPermissions

开发运行和部署变更

idea 启动配置中添加 JVM 参数用于开发运行

--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.launcher=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.source.tree=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.lang.annotation=ALL-UNNAMED
--add-opens=java.base/java.lang.constant=ALL-UNNAMED
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED
--add-opens=java.base/java.lang.module=ALL-UNNAMED
--add-opens=java.base/java.lang.ref=ALL-UNNAMED
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
--add-opens=java.base/java.lang.runtime=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.math=ALL-UNNAMED
--add-opens=java.base/java.net=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED
--add-opens=java.base/java.security=ALL-UNNAMED
--add-opens=java.base/java.text=ALL-UNNAMED
--add-opens=java.base/java.time=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.xml/com.sun.org.apache.xpath.internal.jaxp=ALL-UNNAMED
--add-opens=java.base/jdk.internal.access=ALL-UNNAMED

服务器部署命令中添加 JVM 参数

java \
  --add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.launcher=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
  --add-opens=jdk.compiler/com.sun.source.tree=ALL-UNNAMED \
  --add-opens=java.base/java.lang=ALL-UNNAMED \
  --add-opens=java.base/java.lang.annotation=ALL-UNNAMED \
  --add-opens=java.base/java.lang.constant=ALL-UNNAMED \
  --add-opens=java.base/java.lang.invoke=ALL-UNNAMED \
  --add-opens=java.base/java.lang.module=ALL-UNNAMED \
  --add-opens=java.base/java.lang.ref=ALL-UNNAMED \
  --add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
  --add-opens=java.base/java.lang.runtime=ALL-UNNAMED \
  --add-opens=java.base/java.io=ALL-UNNAMED \
  --add-opens=java.base/java.lang=ALL-UNNAMED \
  --add-opens=java.base/java.math=ALL-UNNAMED \
  --add-opens=java.base/java.net=ALL-UNNAMED \
  --add-opens=java.base/java.nio=ALL-UNNAMED \
  --add-opens=java.base/java.security=ALL-UNNAMED \
  --add-opens=java.base/java.text=ALL-UNNAMED \
  --add-opens=java.base/java.time=ALL-UNNAMED \
  --add-opens=java.base/java.util=ALL-UNNAMED \
  --add-opens=java.xml/com.sun.org.apache.xpath.internal.jaxp=ALL-UNNAMED \
  --add-opens=java.base/jdk.internal.access=ALL-UNNAMED \
  -jar boot.jar

参考资料: 按组件分类的包名变更

注: 此参考资料由 AI 生成,生成结果可能出现偏差或错误,请仔细甄别。

1. Servlet / JSP / EL(最常用)

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.servlet.* jakarta.servlet.* 核心 Servlet API(Request/Response/Filter 等)
javax.servlet.http.* jakarta.servlet.http.* HTTP 相关 Servlet API
javax.servlet.annotation.* jakarta.servlet.annotation.* Servlet 注解(@WebServlet、@WebFilter 等)
javax.servlet.jsp.* jakarta.servlet.jsp.* JSP 核心 API
javax.servlet.jsp.tagext.* jakarta.servlet.jsp.tagext.* JSP 标签扩展
javax.el.* jakarta.el.* 表达式语言(EL)
javax.servlet.jsp.el.* jakarta.servlet.jsp.el.* JSP EL 集成

2. JPA(持久化)

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.persistence.* jakarta.persistence.* JPA 核心 API(@Entity、@Table、EntityManager 等)
javax.persistence.criteria.* jakarta.persistence.criteria.* JPA 条件查询
javax.persistence.metamodel.* jakarta.persistence.metamodel.* JPA 元模型
javax.persistence.spi.* jakarta.persistence.spi.* JPA 服务提供接口

3. JAX-RS(RESTful)

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.ws.rs.* jakarta.ws.rs.* JAX-RS 核心 API(@GET、@POST、Path 等)
javax.ws.rs.client.* jakarta.ws.rs.client.* 客户端 API
javax.ws.rs.core.* jakarta.ws.rs.core.* 核心对象(Response、MediaType 等)
javax.ws.rs.ext.* jakarta.ws.rs.ext.* 扩展接口

4. JAX-WS(WebService)

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.xml.ws.* jakarta.xml.ws.* JAX-WS 核心 API
javax.xml.ws.handler.* jakarta.xml.ws.handler.* 处理器 API
javax.xml.ws.http.* jakarta.xml.ws.http.* HTTP 绑定
javax.jws.* jakarta.jws.* WebService 注解(@WebService、@WebMethod 等)
javax.xml.bind.* jakarta.xml.bind.* JAXB(XML 绑定,JDK 8 内置,JDK 11+ 需手动引入)
javax.xml.bind.annotation.* jakarta.xml.bind.annotation.* JAXB 注解(@XmlRootElement 等)

5. JMS(消息队列)

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.jms.* jakarta.jms.* JMS 核心 API(Connection、Session、Message 等)

6. Bean Validation(参数校验)

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.validation.* jakarta.validation.* 校验核心 API(@Valid、@NotNull、Validator 等)
javax.validation.constraints.* jakarta.validation.constraints.* 内置校验注解
javax.validation.groups.* jakarta.validation.groups.* 校验分组

7. CDI(依赖注入)

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.enterprise.context.* jakarta.enterprise.context.* CDI 上下文(@RequestScoped、@SessionScoped 等)
javax.enterprise.inject.* jakarta.enterprise.inject.* CDI 注入(@Inject、@Named 等)
javax.inject.* jakarta.inject.* JSR-330 依赖注入(Spring 也依赖此包)

8. 其他常用组件

原 JDK 8/Java EE 包名 JDK 17/Jakarta EE 包名 说明
javax.annotation.* jakarta.annotation.* 通用注解(@Resource、@PostConstruct、@PreDestroy 等)
javax.transaction.* jakarta.transaction.* 事务 API(@Transactional、UserTransaction 等)
javax.mail.* jakarta.mail.* JavaMail 邮件 API
javax.json.* jakarta.json.* JSON 处理 API
javax.faces.* jakarta.faces.* JSF 前端框架

Oinone社区 作者:张博昊原创文章,如若转载,请注明出处:https://doc.oinone.top/version/25243.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
张博昊的头像张博昊数式管理员
上一篇 2025年12月17日 pm12:00
下一篇 2025年12月17日 pm12:00

相关推荐

  • 5.0.4版本bugfix:修复Schedule远程调用的问题,请升级对应版本

    版本号: 5.0.20 版本发布日期:2024.08.27更新要点: 修复Schedule远程调用的问题 5.0.20 版本 升级说明及步骤(已升级为5.0.0版本忽略) 此版本与4.7.8版本的兼容方案如下,请严格参照升级说明及步骤进行1、【重要】升级前备份base库和用户权限模块所在的库 2、【重要】升级过程执行SQL严格按照升级文档中的步骤执行。特别注意:部分SQL是要求【发布前执行】,部分SQL是要求【发布后执行】 5.0.0升级详细说明及步骤 升级内容(5.0.0) 修复Schedule远程调用的问题 修复数据可视化未正确查询图表模板的问题 修复界面设计器在使用pgsql时删除菜单报错的问题 请尽可能保证业务工程前后端服务以及设计器同步升级前端服务仅需重新执行npm install即可自动升级到最新版本 版本包信息 Oinone平台部署及依赖说明(v5.0) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <pamirs.middleware.version>5.0.3</pamirs.middleware.version> <pamirs.k2.version>5.0.10</pamirs.k2.version> <pamirs.framework.version>5.0.29</pamirs.framework.version> <pamirs.boot.version>5.0.21</pamirs.boot.version> <pamirs.distribution.version>5.0.11</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>5.0.1</pamirs.metadata.manager> <pamirs.core.version>5.0.42</pamirs.core.version> <pamirs.workflow.version>5.0.11</pamirs.workflow.version> <pamirs.workbench.version>5.0.3</pamirs.workbench.version> <pamirs.data.visualization.version>5.0.4</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>5.0.5</pamirs.designer.common.version> <pamirs.flow.designer.base.version>5.0.3</pamirs.flow.designer.base.version> <pamirs.workflow.designer.version>5.0.2</pamirs.workflow.designer.version> <pamirs.model.designer.version>5.0.2</pamirs.model.designer.version> <pamirs.ui.designer.version>5.0.17</pamirs.ui.designer.version> <pamirs.data.designer.version>5.0.2</pamirs.data.designer.version> <pamirs.dataflow.designer.version>5.0.3</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>5.0.4</pamirs.eip.designer.version> 注意镜像名称变化 镜像说明 所有镜像均使用docker manifest支持amd64和arm64架构。如镜像拉取过慢,可在对应镜像Tag添加-amd64、-arm64后缀获取单一架构镜像。 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.0:5.0.20-amd64 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.0:5.0.20-arm64 镜像拉取 镜像或JAR版本:5.0.20 体验镜像:(所有中间件及前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.0:5.0.20 部署镜像:(包含前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-mini-v5.0:5.0.20 流程设计器镜像:(包含前后端服务,仅包含流程设计器) PS:原workflow-designer-standard-v5.0镜像不再提供,请更换为该镜像。 docker pull harbor.oinone.top/oinone/workflow-designer-v5.0:5.0.20 后端镜像:(仅包含后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/designer-backend-v5.0:5.0.20 前端镜像:(仅包含前端服务,包含全部设计器) PS:前端镜像版本为独立版本,与其他镜像版本不同。原基础镜像为nginx-1.21.0版本,从5.0.8版本开始使用nginx-1.24.0版为基础镜像 docker pull harbor.oinone.top/oinone/designer-frontend-v5.0:5.0.31 独立部署所有设计器JAR:(后端服务,包含所有设计器)pamirs-designer-boot-v5.0-5.0.20.jarpamirs-designer-boot-v5.0-latest.jar 独立部署流程设计器JAR:(后端服务,仅包含流程设计器)pamirs-workflow-designer-boot-v5.0-5.0.20.jarpamirs-workflow-designer-boot-v5.0-latest.jar 后端无代码设计器Jar包启动方法 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,请及时更新至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢!

    2024年8月27日
    1.1K00
  • 4.7.8.3版本升级说明-20240408

    版本号: 4.7.8.3版本发布日期:2024.04.08更新要点:该版本支持openGauss,Oinone可视化调试工具 4.7.8.3版本 升级内容 1、本支持openGauss 2、Oinone可视化调试工具 版本包信息 未使用到的版本号请忽略,按项目中使用到的进行替换 4.7.8.3 4.7.8.3 4.7.8.3 4.7.8.3 4.7.8.3 4.7.8.3 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 4.7.8 docker pull harbor.oinone.top/oinone/designer:4.7.9.7-allinone-fulldocker pull harbor.oinone.top/oinone/designer:4.7.9.7-allinone-mini 相关参考 【OpenGauss】后端部署使用OpenGauss数据库,参考:https://doc.oinone.top/backend/6424.html 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,请及时更新至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢!

    2024年4月8日
    1.3K00
  • 5.2.0版本feature:新增Kingbase8数据库方言支持,请升级对应版本

    版本号: 5.2.6 版本发布日期:2024.10.31更新要点:新增Kingbase8数据库方言支持 5.2.0 版本 升级说明及步骤(已升级为5.0.0版本忽略) 此版本与4.7.8版本的兼容方案如下,请严格参照升级说明及步骤进行1、【重要】升级前备份base库和用户权限模块所在的库 2、【重要】升级过程执行SQL严格按照升级文档中的步骤执行。特别注意:部分SQL是要求【发布前执行】,部分SQL是要求【发布后执行】 5.0.0升级详细说明及步骤 升级内容(5.2.0) 新增Kingbase8数据库方言支持(配置文档) 支持混合数据源配置 移除ResourceFileForm#fileName字段,支持平台启动与数据库大小写敏感不相关。(即无论数据库是大小写敏感还是不敏感,Oinone平台均可正常运行) easyexcel版本更新至3.3.4,修复csv无法正确读取的问题。(暂时未修复字符集读取问题,待下一版本解决) 修复分享时缓存中ID丢失导致的空指针问题 修复用户偏好无法搜索字段问题 修复左树右表无法搜索的问题 修复SQLServer启动时未忽略SSL验证导致启动失败的问题 修复PostgreSQL更新数据时未同步更新writeDate字段值的问题 修复分布式缓存的模块菜单和模型动作元数据缓存未自动填充到redis的问题 修复首次启动失败后配置校验导致无法正常重启的问题 请尽可能保证业务工程前后端服务以及设计器同步升级前端服务仅需重新执行npm install即可自动升级到最新版本 版本包信息 Oinone平台部署及依赖说明(v5.0) 未使用到的版本号请忽略,按项目中使用到的进行替换。 <!– 平台基础 –> <pamirs.middleware.version>5.2.3</pamirs.middleware.version> <pamirs.k2.version>5.2.5</pamirs.k2.version> <pamirs.framework.version>5.2.6</pamirs.framework.version> <pamirs.boot.version>5.2.7</pamirs.boot.version> <pamirs.distribution.version>5.2.6</pamirs.distribution.version> <!– 平台功能 –> <pamirs.metadata.manager>5.2.1</pamirs.metadata.manager> <pamirs.designer.metadata.version>5.2.0</pamirs.designer.metadata.version> <pamirs.core.version>5.2.6</pamirs.core.version> <pamirs.workflow.version>5.2.1</pamirs.workflow.version> <pamirs.workbench.version>5.2.0</pamirs.workbench.version> <pamirs.data.visualization.version>5.2.5</pamirs.data.visualization.version> <!– 设计器 –> <pamirs.designer.common.version>5.2.1</pamirs.designer.common.version> <pamirs.flow.designer.base.version>5.2.2</pamirs.flow.designer.base.version> <pamirs.workflow.designer.version>5.2.0</pamirs.workflow.designer.version> <pamirs.model.designer.version>5.2.2</pamirs.model.designer.version> <pamirs.ui.designer.version>5.2.3</pamirs.ui.designer.version> <pamirs.data.designer.version>5.2.4</pamirs.data.designer.version> <pamirs.dataflow.designer.version>5.2.0</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>5.2.3</pamirs.eip.designer.version> 镜像说明 所有镜像均使用docker manifest支持amd64和arm64架构。如镜像拉取过慢,可在对应镜像Tag添加-amd64、-arm64后缀获取单一架构镜像。 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.6-amd64 docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.6-arm64 镜像拉取 镜像或JAR版本:5.2.6 体验镜像:(所有中间件及前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-full-v5.2:5.2.6 部署镜像:(包含前后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/oinone-designer-mini-v5.2:5.2.6 流程设计器镜像:(包含前后端服务,仅包含流程设计器) docker pull harbor.oinone.top/oinone/workflow-designer-v5.2:5.2.6 后端镜像:(仅包含后端服务,包含全部设计器) docker pull harbor.oinone.top/oinone/designer-backend-v5.2:5.2.6 前端镜像:(仅包含前端服务,包含全部设计器) PS:前端镜像版本为独立版本,与其他镜像版本不同。原基础镜像为nginx-1.21.0版本,从5.0.7版本开始使用nginx-1.24.0版为基础镜像 docker pull harbor.oinone.top/oinone/designer-frontend-v5.2:5.2.7 独立部署所有设计器JAR:(后端服务,包含所有设计器)pamirs-designer-boot-v5.2-5.2.6.jarpamirs-designer-boot-v5.2-latest.jar 独立部署流程设计器JAR:(后端服务,仅包含流程设计器)pamirs-workflow-designer-boot-v5.2-5.2.6.jarpamirs-workflow-designer-boot-v5.2-latest.jar 后端无代码设计器Jar包启动方法 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,请及时更新至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢!

    2024年10月31日
    1.2K00
  • 5.x前端升级事项

    1.开放源码注意事项 前端从2024年7月23日发布的5.0.57版本开始,将前端组件相关的源码放到了npm包供大家方便调试和理解,该版本需要在原有启动工程的src目录下新增翻译相关的全局vue插件 插件下载地址 2.搜索区域的数据字典字段支持标签栏写法优化 下图为数据字段标签栏功能示意图 5.x之前是在SearchWidget.ts内通过属性和方法实现,5.x开始剥离出了SearchTabWidget组件来实现 以下为原本在SearchWidget.ts内的方法,现已不再提供 export class SearchWidget extends BaseSearchWidget { @Widget.Reactive() protected get cateFields(): string[]; @Widget.Reactive() protected get topCateModelField(): RuntimeModelField | undefined; @Widget.Reactive() protected get showTopCateAll(); @Widget.Reactive() protected get topCateFieldOptions(); @Widget.Reactive() protected get secondCateModelField(): RuntimeModelField | undefined; @Widget.Reactive() protected get showSecondCateAll(); @Widget.Reactive() protected get secondCateFieldOptions(); } 迁移到了SearchTabWidget.ts @SPI.ClassFactory( BaseElementWidget.Token({ viewType: ViewType.Search, widget: 'SearchTab' }) ) export class SearchTabWidget extends BaseElementWidget { @Widget.Reactive() protected get cateFields(): string[]; @Widget.Reactive() protected get topCateModelField(): RuntimeModelField | undefined; @Widget.Reactive() protected get showTopCateAll(); @Widget.Reactive() protected get topCateFieldOptions(); @Widget.Reactive() protected get secondCateModelField(): RuntimeModelField | undefined; @Widget.Reactive() protected get showSecondCateAll(); @Widget.Reactive() protected get secondCateFieldOptions(); } 3.视图动作执行的executeViewAction方法的第一个入参需要提供path参数来控制权限 export class DemoTableStringWidget extends TableStringFieldWidget { // ❌ 错误的写法,完全手写,无法拿到该动作在当前页面的权限路径参数(path) private oldGotoAction() { executeViewAction( { viewType: ViewType.Table, moduleName: 'resource', model: 'resource.ResourceCity', name: 'resource#市', // 注释掉的下面这行的path属性可能是动态的,所以无法在此处写死 // path: 'xxxx' } as RuntimeViewAction ); } // ✅ 正确的写法,将动作配置到当前页面中(不想展示可以隐藏), // 这样才能在解析页面的时候拿到下面有哪些动作,才可以在权限处管理该页面下的所有动作, // 页面进入后会从后端拿到该页面的所有动作极其权限信息,前端的自定义代码就根据动作名称拿到带了权限信息的“动作Action”实例 private newGotoAction() { const viewAction = this.model.modelActions.find((a) => a.name === 'resource#市'); executeViewAction(viewAction); } }

    2024年7月23日
    2.4K00
  • 3.4.0版本更新说明-20230128

    版本号:3.4.0发布日期:2023.01.28更新要点: 控制页面权限时不处理内嵌视图的字段和动作 优化分布式元数据缓存逻辑 客户端动作(添加、编辑)按钮样式默认为主要按钮 修复卡片绑定倒计时字段的bug 创建枚举字段时,过滤已隐藏的数据字典 调整应用创建首页代码(事务) 1 发布概要 发布内容: 控制页面权限时,不处理字段和动作带来的内嵌视图 分布式元数据缓存bugfix 格开关带来的客户端动作(添加、编辑)按钮样式默认为主要按钮 解决卡片绑定倒计时字段的bug 创建枚举字段,选择数据字典时过滤已隐藏的数据字典 应用创建首页代码调整(事务) 2.版本信息 <pamirs.middleware.version>3.5.7</pamirs.middleware.version> <pamirs.boot.version>3.5.7</pamirs.boot.version> <pamirs.framework.version>3.5.7</pamirs.framework.version> <pamirs.k2.version>3.5.7</pamirs.k2.version> <pamirs.core.version>3.5.7</pamirs.core.version> <pamirs.tenant.version>3.5.7</pamirs.tenant.version> <pamirs.lowcode.version>3.5.7</pamirs.lowcode.version> <pamirs.designer.version>3.5.7</pamirs.designer.version> <pamirs.workflow.designer.version>3.5.7</pamirs.workflow.designer.version> <pamirs.workflow.version>3.5.7</pamirs.workflow.version> <pamirs.workbench.version>3.5.7</pamirs.workbench.version> <pamirs.designer.common.version>3.5.7</pamirs.designer.common.version> <pamirs.model.designer.version>3.5.7</pamirs.model.designer.version> <pamirs.logic.designer.version>3.5.7</pamirs.logic.designer.version> <pamirs.ui.designer.version>3.5.7</pamirs.ui.designer.version> <pamirs.data.designer.version>3.5.7</pamirs.data.designer.version> <pamirs.data.visualization.version>3.5.7</pamirs.data.visualization.version> <pamirs.distribution.version>3.5.7</pamirs.distribution.version> <pamirs.welcome.version>3.5.7</pamirs.welcome.version> <pamirs.gemini.version>3.5.7</pamirs.gemini.version> <pamirs.paas.version>3.5.7</pamirs.paas.version> 如果您有任何问题、建议或反馈,请随时联系我们。为了获得最佳体验,建议请升级至最新版本。我们将继续努力改进产品,提供更好的服务。谢谢您的支持!

    2023年1月28日
    92200

Leave a Reply

登录后才能评论