当前位置: 首页 > news >正文

在 Kubernetes 集群中手动部署开发的应用程序

背景与应用市场:Spring Boot 应用从构建到 Kubernetes 部署

一、技术背景:云原生时代的开发与运维变革

Spring Boot 与 Kubernetes 的结合,是企业级应用从 “单体架构” 向 “云原生架构” 转型的必然结果,其核心驱动力来自三方面:

1. Spring Boot:微服务开发的 “效率引擎”
  • 市场统治力:Spring Boot 以超 65% 的渗透率(国内)和68% 的全球份额(企业级微服务市场),成为 Java 微服务开发的事实标准。其 “自动配置”“起步依赖” 特性将微服务开发门槛降低 70%,尤其在金融、电信等复杂场景中,凭借成熟的生态(Spring Cloud、Spring Security 等)成为企业首选。
  • 痛点解决:传统单体 Java 应用(如基于 SSH 框架)面临 “代码臃肿、部署缓慢、扩展困难” 等问题,而 Spring Boot 的模块化设计和快速启动特性(支持 GraalVM 原生镜像,启动时间降至毫秒级),完美适配云环境的 “弹性伸缩” 需求。
2. Kubernetes:容器编排的 “事实标准”
  • 企业级渗透率:2025 年全球70% 以上企业已采用或评估 Kubernetes,阿里云 ACK、华为云 CCE 等托管服务支持 “百万级容器部署”,京东双 11 依赖 K8s 实现 “秒级扩展 10 万容器”,腾讯《和平精英》通过 K8s 将高峰延迟降至 30ms。
  • 核心能力:K8s 的 “自动化部署、弹性伸缩、服务发现、故障自愈” 特性,解决了 Spring Boot 应用在 “多环境一致性”“高并发流量承载”“故障快速恢复” 等场景下的运维难题。例如,某银行通过 K8s 部署 Spring Boot 微服务,故障恢复时间从 “小时级” 缩短至 “秒级”。
3. 云原生转型:业务敏捷性的 “刚需”

全球云原生应用市场规模预计 2025 年达1275 亿美元,金融、零售、医疗是核心增长引擎。企业对 “快速迭代(如电商大促需求)”“高可用(如银行交易系统)”“弹性扩展(如直播平台峰值流量)” 的需求,推动 Spring Boot + Kubernetes 成为云原生架构的 “黄金组合”。

二、应用市场:垂直行业与核心场景

Spring Boot 应用从构建到 K8s 部署的需求,广泛覆盖高并发、高可用、需快速迭代的行业与场景:

1. 金融行业:稳定性与合规性驱动
  • 典型场景:支付系统、风控引擎、微服务银行核心系统。
  • 案例
    • 网商银行采用 Spring Boot + K8s 重构支付系统,部署速度从 “小时级” 缩短至 “分钟级”,资源利用率提升 30%;
    • 某银行通过 K8s 管理 Spring Boot 微服务集群,实现 “交易峰值 10 万 QPS” 下的零宕机,且通过 ConfigMap/Secret 集中管理金融敏感配置(如 TLS 证书、数据库密码),满足 PCI-DSS 合规要求。
2. 电商行业:流量波动与高并发驱动
  • 典型场景:商品详情、订单系统、促销活动页面。
  • 案例
    • 京东双 11 依赖阿里云 ACK(K8s 托管服务)部署 Spring Boot 微服务,支持 “秒级扩容 10 万容器”,用户请求延迟降低 50%;
    • 开源电商项目 ZKmall 基于 Spring Boot 3 + K8s 构建,通过 HPA(水平自动扩缩容)实现 “双 11 峰值 10 万 QPS” 下的弹性伸缩,热点商品缓存命中率提升至 99%。
3. 教育与医疗:高可用与资源优化驱动
  • 教育场景:在线课堂、考试系统(需支持 “百万级并发答题”)。
  • 医疗场景:电子病历系统、远程问诊平台(需保障 “7×24 小时高可用”)。
  • 价值:K8s 的 “自愈能力”(Pod 故障自动重建)+ Spring Boot 的 “快速开发”,帮助教育 / 医疗企业在 “突发流量(如开学季)” 或 “业务连续性(如医院系统)” 场景下稳定服务。
4. 互联网与 SaaS:快速迭代与多租户驱动
  • 典型场景:SaaS 平台多租户隔离、社交应用消息推送。
  • 案例:某社交 App 通过 K8s 部署 Spring Boot 微服务,实现 “千万级在线用户” 的消息推送,通过 “命名空间隔离” 为不同租户提供独立服务实例,资源按需分配。
5. 开源与社区生态:技术普惠驱动

GitHub 上超10 万 Star的 Spring Boot + K8s 开源项目(如 spring-boot-microservices-e-commerce-project),提供 “从代码到部署” 的全流程示例,降低中小企业采用门槛。这些项目通常包含:

  • 微服务拆分:用户、订单、商品服务独立部署;
  • K8s 配置示例:Deployment(滚动更新)、Service(NodePort 暴露)、Ingress(HTTP 路由)的 YAML 模板;
  • 可观测性集成:Prometheus 监控、ELK 日志收集。
三、市场趋势:从 “能用” 到 “好用” 的深化
  1. 开发工具链整合:IDE(如 IntelliJ IDEA)、CI/CD 工具(如 Jenkins X)支持 “Spring Boot 代码一键生成 K8s 配置”,开发运维协同效率提升 50%。
  2. 边缘计算与异构资源:K8s 对 GPU/FPGA 的支持(如 AI 推理服务),推动 Spring Boot 应用向 “云边协同” 场景延伸(如工业 IoT 设备管理)。
  3. Serverless 融合:Spring Boot 应用通过 K8s 集成 Knative,实现 “按需启动、零闲置资源”,成本降低 25%。

总结

Spring Boot 应用从构建到 Kubernetes 部署的背景,是云原生转型下 “开发效率” 与 “运维复杂度” 的平衡需求;其应用市场则聚焦于高并发、高可用、需快速迭代的垂直行业(金融、电商、医疗),并通过开源生态普惠中小企业。未来,随着 K8s 特性(如 Sidecar 容器、Gateway API)的成熟,Spring Boot + K8s 的组合将进一步渗透到 “边缘计算”“AI 工程化” 等新兴场景。

一、环境准备(host1:构建机,需提前部署 JDK、Maven、Docker)

        1. 安装 JDK(内网离线包方式)

[root@host1 ~]# sudo mkdir -p /usr/local/src
[root@host1 ~]# cd /usr/local/src
[root@host1 src]# sudo tar -zxvf OpenJDK11U-jre_x64_linux_hotspot_11.0.18_10.tar.gz -C /usr/local/
jdk-11.0.18+10-jre/
jdk-11.0.18+10-jre/bin/
jdk-11.0.18+10-jre/bin/unpack200
jdk-11.0.18+10-jre/bin/rmiregistry
jdk-11.0.18+10-jre/bin/rmid
jdk-11.0.18+10-jre/bin/jaotc
jdk-11.0.18+10-jre/bin/java
jdk-11.0.18+10-jre/bin/keytool
jdk-11.0.18+10-jre/bin/jrunscript
jdk-11.0.18+10-jre/bin/jjs
jdk-11.0.18+10-jre/bin/jfr
jdk-11.0.18+10-jre/bin/pack200
jdk-11.0.18+10-jre/lib/
jdk-11.0.18+10-jre/lib/libjaas.so
jdk-11.0.18+10-jre/lib/psfont.properties.ja
jdk-11.0.18+10-jre/lib/jrt-fs.jar
jdk-11.0.18+10-jre/lib/libprefs.so
jdk-11.0.18+10-jre/lib/liblcms.so
jdk-11.0.18+10-jre/lib/psfontj2d.properties
jdk-11.0.18+10-jre/lib/libawt_xawt.so
jdk-11.0.18+10-jre/lib/jvm.cfg
jdk-11.0.18+10-jre/lib/libj2pkcs11.so
jdk-11.0.18+10-jre/lib/modules
jdk-11.0.18+10-jre/lib/libj2gss.so
jdk-11.0.18+10-jre/lib/libfontmanager.so
jdk-11.0.18+10-jre/lib/libmlib_image.so
jdk-11.0.18+10-jre/lib/libj2pcsc.so
jdk-11.0.18+10-jre/lib/libawt_headless.so
jdk-11.0.18+10-jre/lib/jspawnhelper
jdk-11.0.18+10-jre/lib/libdt_socket.so
jdk-11.0.18+10-jre/lib/libjawt.so
jdk-11.0.18+10-jre/lib/jexec
jdk-11.0.18+10-jre/lib/libmanagement.so
jdk-11.0.18+10-jre/lib/libmanagement_agent.so
jdk-11.0.18+10-jre/lib/libzip.so
jdk-11.0.18+10-jre/lib/librmi.so
jdk-11.0.18+10-jre/lib/libmanagement_ext.so
jdk-11.0.18+10-jre/lib/libunpack.so
jdk-11.0.18+10-jre/lib/libsplashscreen.so
jdk-11.0.18+10-jre/lib/libsctp.so
jdk-11.0.18+10-jre/lib/jli/
jdk-11.0.18+10-jre/lib/jli/libjli.so
jdk-11.0.18+10-jre/lib/libinstrument.so
jdk-11.0.18+10-jre/lib/security/
jdk-11.0.18+10-jre/lib/security/default.policy
jdk-11.0.18+10-jre/lib/security/public_suffix_list.dat
jdk-11.0.18+10-jre/lib/security/cacerts
jdk-11.0.18+10-jre/lib/security/blocked.certs
jdk-11.0.18+10-jre/lib/tzdb.dat
jdk-11.0.18+10-jre/lib/libjdwp.so
jdk-11.0.18+10-jre/lib/libjsig.so
jdk-11.0.18+10-jre/lib/libverify.so
jdk-11.0.18+10-jre/lib/libjavajpeg.so
jdk-11.0.18+10-jre/lib/libsunec.so
jdk-11.0.18+10-jre/lib/classlist
jdk-11.0.18+10-jre/lib/jfr/
jdk-11.0.18+10-jre/lib/jfr/profile.jfc
jdk-11.0.18+10-jre/lib/jfr/default.jfc
jdk-11.0.18+10-jre/lib/libnet.so
jdk-11.0.18+10-jre/lib/server/
jdk-11.0.18+10-jre/lib/server/libjvm.so
jdk-11.0.18+10-jre/lib/server/Xusage.txt
jdk-11.0.18+10-jre/lib/server/libjsig.so
jdk-11.0.18+10-jre/lib/libextnet.so
jdk-11.0.18+10-jre/lib/libnio.so
jdk-11.0.18+10-jre/lib/libjsound.so
jdk-11.0.18+10-jre/lib/libjava.so
jdk-11.0.18+10-jre/lib/libjimage.so
jdk-11.0.18+10-jre/lib/libawt.so
jdk-11.0.18+10-jre/legal/
jdk-11.0.18+10-jre/legal/jdk.localedata/
jdk-11.0.18+10-jre/legal/jdk.localedata/LICENSE
jdk-11.0.18+10-jre/legal/jdk.localedata/thaidict.md
jdk-11.0.18+10-jre/legal/jdk.localedata/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.localedata/cldr.md
jdk-11.0.18+10-jre/legal/jdk.localedata/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.internal.ed/
jdk-11.0.18+10-jre/legal/jdk.internal.ed/LICENSE
jdk-11.0.18+10-jre/legal/jdk.internal.ed/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.internal.ed/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.dynalink/
jdk-11.0.18+10-jre/legal/jdk.dynalink/LICENSE
jdk-11.0.18+10-jre/legal/jdk.dynalink/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.dynalink/dynalink.md
jdk-11.0.18+10-jre/legal/jdk.dynalink/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.transaction.xa/
jdk-11.0.18+10-jre/legal/java.transaction.xa/LICENSE
jdk-11.0.18+10-jre/legal/java.transaction.xa/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.transaction.xa/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.security.jgss/
jdk-11.0.18+10-jre/legal/java.security.jgss/LICENSE
jdk-11.0.18+10-jre/legal/java.security.jgss/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.security.jgss/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn/
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn/LICENSE
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn/double-conversion.md
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn/joni.md
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.smartcardio/
jdk-11.0.18+10-jre/legal/java.smartcardio/LICENSE
jdk-11.0.18+10-jre/legal/java.smartcardio/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.smartcardio/pcsclite.md
jdk-11.0.18+10-jre/legal/java.smartcardio/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler/
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler/LICENSE
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.internal.le/
jdk-11.0.18+10-jre/legal/jdk.internal.le/LICENSE
jdk-11.0.18+10-jre/legal/jdk.internal.le/jline.md
jdk-11.0.18+10-jre/legal/jdk.internal.le/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.internal.le/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.sctp/
jdk-11.0.18+10-jre/legal/jdk.sctp/LICENSE
jdk-11.0.18+10-jre/legal/jdk.sctp/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.sctp/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.jdwp.agent/
jdk-11.0.18+10-jre/legal/jdk.jdwp.agent/LICENSE
jdk-11.0.18+10-jre/legal/jdk.jdwp.agent/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.jdwp.agent/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.jsobject/
jdk-11.0.18+10-jre/legal/jdk.jsobject/LICENSE
jdk-11.0.18+10-jre/legal/jdk.jsobject/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.jsobject/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.management.jfr/
jdk-11.0.18+10-jre/legal/jdk.management.jfr/LICENSE
jdk-11.0.18+10-jre/legal/jdk.management.jfr/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.management.jfr/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.naming.rmi/
jdk-11.0.18+10-jre/legal/jdk.naming.rmi/LICENSE
jdk-11.0.18+10-jre/legal/jdk.naming.rmi/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.naming.rmi/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.compiler/
jdk-11.0.18+10-jre/legal/java.compiler/LICENSE
jdk-11.0.18+10-jre/legal/java.compiler/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.compiler/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.zipfs/
jdk-11.0.18+10-jre/legal/jdk.zipfs/LICENSE
jdk-11.0.18+10-jre/legal/jdk.zipfs/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.zipfs/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.se/
jdk-11.0.18+10-jre/legal/java.se/LICENSE
jdk-11.0.18+10-jre/legal/java.se/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.se/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.naming/
jdk-11.0.18+10-jre/legal/java.naming/LICENSE
jdk-11.0.18+10-jre/legal/java.naming/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.naming/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.scripting/
jdk-11.0.18+10-jre/legal/java.scripting/LICENSE
jdk-11.0.18+10-jre/legal/java.scripting/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.scripting/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.base/
jdk-11.0.18+10-jre/legal/java.base/LICENSE
jdk-11.0.18+10-jre/legal/java.base/c-libutl.md
jdk-11.0.18+10-jre/legal/java.base/unicode.md
jdk-11.0.18+10-jre/legal/java.base/asm.md
jdk-11.0.18+10-jre/legal/java.base/aes.md
jdk-11.0.18+10-jre/legal/java.base/icu.md
jdk-11.0.18+10-jre/legal/java.base/public_suffix.md
jdk-11.0.18+10-jre/legal/java.base/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.base/cldr.md
jdk-11.0.18+10-jre/legal/java.base/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.xml/
jdk-11.0.18+10-jre/legal/java.xml/LICENSE
jdk-11.0.18+10-jre/legal/java.xml/dom.md
jdk-11.0.18+10-jre/legal/java.xml/xerces.md
jdk-11.0.18+10-jre/legal/java.xml/xalan.md
jdk-11.0.18+10-jre/legal/java.xml/bcel.md
jdk-11.0.18+10-jre/legal/java.xml/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.xml/jcup.md
jdk-11.0.18+10-jre/legal/java.xml/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.xml.dom/
jdk-11.0.18+10-jre/legal/jdk.xml.dom/LICENSE
jdk-11.0.18+10-jre/legal/jdk.xml.dom/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.xml.dom/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn.shell/
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn.shell/LICENSE
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn.shell/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.scripting.nashorn.shell/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.jfr/
jdk-11.0.18+10-jre/legal/jdk.jfr/LICENSE
jdk-11.0.18+10-jre/legal/jdk.jfr/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.jfr/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.naming.ldap/
jdk-11.0.18+10-jre/legal/jdk.naming.ldap/LICENSE
jdk-11.0.18+10-jre/legal/jdk.naming.ldap/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.naming.ldap/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.security.sasl/
jdk-11.0.18+10-jre/legal/java.security.sasl/LICENSE
jdk-11.0.18+10-jre/legal/java.security.sasl/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.security.sasl/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.management/
jdk-11.0.18+10-jre/legal/java.management/LICENSE
jdk-11.0.18+10-jre/legal/java.management/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.management/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.logging/
jdk-11.0.18+10-jre/legal/java.logging/LICENSE
jdk-11.0.18+10-jre/legal/java.logging/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.logging/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.aot/
jdk-11.0.18+10-jre/legal/jdk.aot/LICENSE
jdk-11.0.18+10-jre/legal/jdk.aot/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.aot/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.unsupported/
jdk-11.0.18+10-jre/legal/jdk.unsupported/LICENSE
jdk-11.0.18+10-jre/legal/jdk.unsupported/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.unsupported/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.desktop/
jdk-11.0.18+10-jre/legal/java.desktop/LICENSE
jdk-11.0.18+10-jre/legal/java.desktop/harfbuzz.md
jdk-11.0.18+10-jre/legal/java.desktop/mesa3d.md
jdk-11.0.18+10-jre/legal/java.desktop/colorimaging.md
jdk-11.0.18+10-jre/legal/java.desktop/giflib.md
jdk-11.0.18+10-jre/legal/java.desktop/xwd.md
jdk-11.0.18+10-jre/legal/java.desktop/libpng.md
jdk-11.0.18+10-jre/legal/java.desktop/lcms.md
jdk-11.0.18+10-jre/legal/java.desktop/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.desktop/jpeg.md
jdk-11.0.18+10-jre/legal/java.desktop/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.management.rmi/
jdk-11.0.18+10-jre/legal/java.management.rmi/LICENSE
jdk-11.0.18+10-jre/legal/java.management.rmi/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.management.rmi/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.prefs/
jdk-11.0.18+10-jre/legal/java.prefs/LICENSE
jdk-11.0.18+10-jre/legal/java.prefs/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.prefs/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.crypto.ec/
jdk-11.0.18+10-jre/legal/jdk.crypto.ec/LICENSE
jdk-11.0.18+10-jre/legal/jdk.crypto.ec/ecc.md
jdk-11.0.18+10-jre/legal/jdk.crypto.ec/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.crypto.ec/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.naming.dns/
jdk-11.0.18+10-jre/legal/jdk.naming.dns/LICENSE
jdk-11.0.18+10-jre/legal/jdk.naming.dns/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.naming.dns/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.management/
jdk-11.0.18+10-jre/legal/jdk.management/LICENSE
jdk-11.0.18+10-jre/legal/jdk.management/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.management/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.xml.crypto/
jdk-11.0.18+10-jre/legal/java.xml.crypto/LICENSE
jdk-11.0.18+10-jre/legal/java.xml.crypto/santuario.md
jdk-11.0.18+10-jre/legal/java.xml.crypto/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.xml.crypto/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.sql/
jdk-11.0.18+10-jre/legal/java.sql/LICENSE
jdk-11.0.18+10-jre/legal/java.sql/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.sql/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.charsets/
jdk-11.0.18+10-jre/legal/jdk.charsets/LICENSE
jdk-11.0.18+10-jre/legal/jdk.charsets/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.charsets/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.accessibility/
jdk-11.0.18+10-jre/legal/jdk.accessibility/LICENSE
jdk-11.0.18+10-jre/legal/jdk.accessibility/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.accessibility/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.httpserver/
jdk-11.0.18+10-jre/legal/jdk.httpserver/LICENSE
jdk-11.0.18+10-jre/legal/jdk.httpserver/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.httpserver/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler.management/
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler.management/LICENSE
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.datatransfer/
jdk-11.0.18+10-jre/legal/java.datatransfer/LICENSE
jdk-11.0.18+10-jre/legal/java.datatransfer/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.datatransfer/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.pack/
jdk-11.0.18+10-jre/legal/jdk.pack/LICENSE
jdk-11.0.18+10-jre/legal/jdk.pack/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.pack/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.crypto.cryptoki/
jdk-11.0.18+10-jre/legal/jdk.crypto.cryptoki/LICENSE
jdk-11.0.18+10-jre/legal/jdk.crypto.cryptoki/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md
jdk-11.0.18+10-jre/legal/jdk.crypto.cryptoki/pkcs11wrapper.md
jdk-11.0.18+10-jre/legal/jdk.crypto.cryptoki/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.net.http/
jdk-11.0.18+10-jre/legal/java.net.http/LICENSE
jdk-11.0.18+10-jre/legal/java.net.http/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.net.http/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.net/
jdk-11.0.18+10-jre/legal/jdk.net/LICENSE
jdk-11.0.18+10-jre/legal/jdk.net/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.net/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.security.jgss/
jdk-11.0.18+10-jre/legal/jdk.security.jgss/LICENSE
jdk-11.0.18+10-jre/legal/jdk.security.jgss/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.security.jgss/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.internal.vm.ci/
jdk-11.0.18+10-jre/legal/jdk.internal.vm.ci/LICENSE
jdk-11.0.18+10-jre/legal/jdk.internal.vm.ci/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.internal.vm.ci/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.instrument/
jdk-11.0.18+10-jre/legal/java.instrument/LICENSE
jdk-11.0.18+10-jre/legal/java.instrument/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.instrument/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.sql.rowset/
jdk-11.0.18+10-jre/legal/java.sql.rowset/LICENSE
jdk-11.0.18+10-jre/legal/java.sql.rowset/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.sql.rowset/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.security.auth/
jdk-11.0.18+10-jre/legal/jdk.security.auth/LICENSE
jdk-11.0.18+10-jre/legal/jdk.security.auth/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.security.auth/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/jdk.management.agent/
jdk-11.0.18+10-jre/legal/jdk.management.agent/LICENSE
jdk-11.0.18+10-jre/legal/jdk.management.agent/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/jdk.management.agent/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/legal/java.rmi/
jdk-11.0.18+10-jre/legal/java.rmi/LICENSE
jdk-11.0.18+10-jre/legal/java.rmi/ASSEMBLY_EXCEPTION
jdk-11.0.18+10-jre/legal/java.rmi/ADDITIONAL_LICENSE_INFO
jdk-11.0.18+10-jre/release
jdk-11.0.18+10-jre/NOTICE
jdk-11.0.18+10-jre/man/
jdk-11.0.18+10-jre/man/ja
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/keytool.1
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/java.1
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/pack200.1
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/unpack200.1
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/rmid.1
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/rmiregistry.1
jdk-11.0.18+10-jre/man/ja_JP.UTF-8/man1/jjs.1
jdk-11.0.18+10-jre/man/man1/
jdk-11.0.18+10-jre/man/man1/keytool.1
jdk-11.0.18+10-jre/man/man1/java.1
jdk-11.0.18+10-jre/man/man1/pack200.1
jdk-11.0.18+10-jre/man/man1/unpack200.1
jdk-11.0.18+10-jre/man/man1/rmid.1
jdk-11.0.18+10-jre/man/man1/rmiregistry.1
jdk-11.0.18+10-jre/man/man1/jjs.1
jdk-11.0.18+10-jre/conf/
jdk-11.0.18+10-jre/conf/sound.properties
jdk-11.0.18+10-jre/conf/management/
jdk-11.0.18+10-jre/conf/management/jmxremote.password.template
jdk-11.0.18+10-jre/conf/management/jmxremote.access
jdk-11.0.18+10-jre/conf/management/management.properties
jdk-11.0.18+10-jre/conf/net.properties
jdk-11.0.18+10-jre/conf/security/
jdk-11.0.18+10-jre/conf/security/java.security
jdk-11.0.18+10-jre/conf/security/java.policy
jdk-11.0.18+10-jre/conf/security/policy/
jdk-11.0.18+10-jre/conf/security/policy/README.txt
jdk-11.0.18+10-jre/conf/security/policy/unlimited/
jdk-11.0.18+10-jre/conf/security/policy/unlimited/default_US_export.policy
jdk-11.0.18+10-jre/conf/security/policy/unlimited/default_local.policy
jdk-11.0.18+10-jre/conf/security/policy/limited/
jdk-11.0.18+10-jre/conf/security/policy/limited/exempt_local.policy
jdk-11.0.18+10-jre/conf/security/policy/limited/default_US_export.policy
jdk-11.0.18+10-jre/conf/security/policy/limited/default_local.policy
jdk-11.0.18+10-jre/conf/logging.properties
[root@host1 src]# 
[root@host1 src]# ls /usr/local/ | grep jdk
jdk-11.0.18+10-jre
[root@host1 src]# sudo tee -a /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk-11.0.18+10
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
export JAVA_HOME=/usr/local/jdk-11.0.18+10
export PATH=$JAVA_HOME/bin:$PATH
[root@host1 src]# source /etc/profile
[root@host1 src]# java -version
openjdk version "17.0.16" 2025-07-15 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.16.0.8-1) (build 17.0.16+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.16.0.8-1) (build 17.0.16+8-LTS, mixed mode, sharing)
[root@host1 src]# 

        2. 安装 Maven(内网离线包方式)

[root@host1 src]# sudo tar -zxvf apache-maven-3.8.6-bin.tar.gz -C /usr/local/
apache-maven-3.8.6/README.txt
apache-maven-3.8.6/LICENSE
apache-maven-3.8.6/NOTICE
apache-maven-3.8.6/lib/
apache-maven-3.8.6/lib/commons-cli.license
apache-maven-3.8.6/lib/commons-io.license
apache-maven-3.8.6/lib/commons-lang3.license
apache-maven-3.8.6/lib/guava.license
apache-maven-3.8.6/lib/guice.license
apache-maven-3.8.6/lib/jansi.license
apache-maven-3.8.6/lib/javax.annotation-api.license
apache-maven-3.8.6/lib/javax.inject.license
apache-maven-3.8.6/lib/jcl-over-slf4j.license
apache-maven-3.8.6/lib/org.eclipse.sisu.inject.license
apache-maven-3.8.6/lib/org.eclipse.sisu.plexus.license
apache-maven-3.8.6/lib/plexus-cipher.license
apache-maven-3.8.6/lib/plexus-component-annotations.license
apache-maven-3.8.6/lib/plexus-interpolation.license
apache-maven-3.8.6/lib/plexus-sec-dispatcher.license
apache-maven-3.8.6/lib/plexus-utils.license
apache-maven-3.8.6/lib/slf4j-api.license
apache-maven-3.8.6/boot/
apache-maven-3.8.6/boot/plexus-classworlds.license
apache-maven-3.8.6/lib/jansi-native/
apache-maven-3.8.6/lib/jansi-native/Windows/
apache-maven-3.8.6/lib/jansi-native/Windows/x86/
apache-maven-3.8.6/lib/jansi-native/Windows/x86_64/
apache-maven-3.8.6/lib/jansi-native/Windows/x86/jansi.dll
apache-maven-3.8.6/lib/jansi-native/Windows/x86_64/jansi.dll
apache-maven-3.8.6/bin/m2.conf
apache-maven-3.8.6/bin/mvn.cmd
apache-maven-3.8.6/bin/mvnDebug.cmd
apache-maven-3.8.6/bin/mvn
apache-maven-3.8.6/bin/mvnDebug
apache-maven-3.8.6/bin/mvnyjp
apache-maven-3.8.6/conf/
apache-maven-3.8.6/conf/logging/
apache-maven-3.8.6/conf/logging/simplelogger.properties
apache-maven-3.8.6/conf/settings.xml
apache-maven-3.8.6/conf/toolchains.xml
apache-maven-3.8.6/lib/ext/
apache-maven-3.8.6/lib/jansi-native/
apache-maven-3.8.6/lib/ext/README.txt
apache-maven-3.8.6/lib/jansi-native/README.txt
apache-maven-3.8.6/boot/plexus-classworlds-2.6.0.jar
apache-maven-3.8.6/lib/maven-embedder-3.8.6.jar
apache-maven-3.8.6/lib/maven-settings-3.8.6.jar
apache-maven-3.8.6/lib/maven-settings-builder-3.8.6.jar
apache-maven-3.8.6/lib/maven-plugin-api-3.8.6.jar
apache-maven-3.8.6/lib/maven-model-3.8.6.jar
apache-maven-3.8.6/lib/maven-model-builder-3.8.6.jar
apache-maven-3.8.6/lib/maven-builder-support-3.8.6.jar
apache-maven-3.8.6/lib/maven-resolver-api-1.6.3.jar
apache-maven-3.8.6/lib/maven-resolver-util-1.6.3.jar
apache-maven-3.8.6/lib/maven-shared-utils-3.3.4.jar
apache-maven-3.8.6/lib/commons-io-2.6.jar
apache-maven-3.8.6/lib/guice-4.2.2-no_aop.jar
apache-maven-3.8.6/lib/guava-25.1-android.jar
apache-maven-3.8.6/lib/javax.inject-1.jar
apache-maven-3.8.6/lib/javax.annotation-api-1.2.jar
apache-maven-3.8.6/lib/plexus-utils-3.3.1.jar
apache-maven-3.8.6/lib/plexus-sec-dispatcher-2.0.jar
apache-maven-3.8.6/lib/plexus-cipher-2.0.jar
apache-maven-3.8.6/lib/slf4j-api-1.7.36.jar
apache-maven-3.8.6/lib/commons-lang3-3.8.1.jar
apache-maven-3.8.6/lib/maven-core-3.8.6.jar
apache-maven-3.8.6/lib/maven-repository-metadata-3.8.6.jar
apache-maven-3.8.6/lib/maven-artifact-3.8.6.jar
apache-maven-3.8.6/lib/maven-resolver-provider-3.8.6.jar
apache-maven-3.8.6/lib/maven-resolver-impl-1.6.3.jar
apache-maven-3.8.6/lib/maven-resolver-spi-1.6.3.jar
apache-maven-3.8.6/lib/org.eclipse.sisu.inject-0.3.5.jar
apache-maven-3.8.6/lib/plexus-interpolation-1.26.jar
apache-maven-3.8.6/lib/plexus-component-annotations-2.1.0.jar
apache-maven-3.8.6/lib/maven-compat-3.8.6.jar
apache-maven-3.8.6/lib/wagon-provider-api-3.5.1.jar
apache-maven-3.8.6/lib/org.eclipse.sisu.plexus-0.3.5.jar
apache-maven-3.8.6/lib/commons-cli-1.4.jar
apache-maven-3.8.6/lib/wagon-http-3.5.1-shaded.jar
apache-maven-3.8.6/lib/jcl-over-slf4j-1.7.36.jar
apache-maven-3.8.6/lib/wagon-file-3.5.1.jar
apache-maven-3.8.6/lib/maven-resolver-connector-basic-1.6.3.jar
apache-maven-3.8.6/lib/maven-resolver-transport-wagon-1.6.3.jar
apache-maven-3.8.6/lib/maven-slf4j-provider-3.8.6.jar
apache-maven-3.8.6/lib/jansi-2.4.0.jar
[root@host1 src]# sudo tee -a /etc/profile << EOF
export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=\$MAVEN_HOME/bin:\$PATH
EOF
export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=$MAVEN_HOME/bin:$PATH
[root@host1 src]# source /etc/profile
[root@host1 src]# mkdir -p ~/.m2[root@host1 src]# cat > ~/.m2/settings.xml << EOF
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><mirrors><mirror><id>aliyun-internal</id><name>阿里云内网 Maven 镜像</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>*</mirrorOf></mirror></mirrors>
</settings>
EOF
[root@host1 src]# mvn -v
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.

下载正确的 JDK ,需确保 Maven 能找到有效的 JDK 环境(Maven 运行依赖 JDK,仅 JRE 不够)

[root@host1 src]# sudo tar -zxvf "OpenJDK11U-jdk_x64_linux_hotspot_11.0.28_6.tar(1).gz" -C /usr/local/
jdk-11.0.28+6/
jdk-11.0.28+6/include/
jdk-11.0.28+6/include/jni.h
jdk-11.0.28+6/include/jvmti.h
jdk-11.0.28+6/include/classfile_constants.h
jdk-11.0.28+6/include/linux/
jdk-11.0.28+6/include/linux/jni_md.h
jdk-11.0.28+6/include/linux/jawt_md.h
jdk-11.0.28+6/include/jvmticmlr.h
jdk-11.0.28+6/include/jawt.h
jdk-11.0.28+6/include/jdwpTransport.h
jdk-11.0.28+6/conf/
jdk-11.0.28+6/conf/net.properties
jdk-11.0.28+6/conf/logging.properties
jdk-11.0.28+6/conf/sound.properties
jdk-11.0.28+6/conf/management/
jdk-11.0.28+6/conf/management/management.properties
jdk-11.0.28+6/conf/management/jmxremote.access
jdk-11.0.28+6/conf/management/jmxremote.password.template
jdk-11.0.28+6/conf/security/
jdk-11.0.28+6/conf/security/java.policy
jdk-11.0.28+6/conf/security/policy/
jdk-11.0.28+6/conf/security/policy/unlimited/
jdk-11.0.28+6/conf/security/policy/unlimited/default_local.policy
jdk-11.0.28+6/conf/security/policy/unlimited/default_US_export.policy
jdk-11.0.28+6/conf/security/policy/README.txt
jdk-11.0.28+6/conf/security/policy/limited/
jdk-11.0.28+6/conf/security/policy/limited/exempt_local.policy
jdk-11.0.28+6/conf/security/policy/limited/default_local.policy
jdk-11.0.28+6/conf/security/policy/limited/default_US_export.policy
jdk-11.0.28+6/conf/security/java.security
jdk-11.0.28+6/man/
jdk-11.0.28+6/man/man1/
jdk-11.0.28+6/man/man1/jjs.1
jdk-11.0.28+6/man/man1/jrunscript.1
jdk-11.0.28+6/man/man1/pack200.1
jdk-11.0.28+6/man/man1/keytool.1
jdk-11.0.28+6/man/man1/jdeps.1
jdk-11.0.28+6/man/man1/jstack.1
jdk-11.0.28+6/man/man1/jstatd.1
jdk-11.0.28+6/man/man1/java.1
jdk-11.0.28+6/man/man1/jstat.1
jdk-11.0.28+6/man/man1/jinfo.1
jdk-11.0.28+6/man/man1/javap.1
jdk-11.0.28+6/man/man1/jarsigner.1
jdk-11.0.28+6/man/man1/jdb.1
jdk-11.0.28+6/man/man1/jmap.1
jdk-11.0.28+6/man/man1/jar.1
jdk-11.0.28+6/man/man1/rmic.1
jdk-11.0.28+6/man/man1/unpack200.1
jdk-11.0.28+6/man/man1/rmid.1
jdk-11.0.28+6/man/man1/javadoc.1
jdk-11.0.28+6/man/man1/jconsole.1
jdk-11.0.28+6/man/man1/rmiregistry.1
jdk-11.0.28+6/man/man1/serialver.1
jdk-11.0.28+6/man/man1/jcmd.1
jdk-11.0.28+6/man/man1/javac.1
jdk-11.0.28+6/man/man1/jps.1
jdk-11.0.28+6/man/ja_JP.UTF-8/
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jjs.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jrunscript.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/pack200.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/keytool.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jdeps.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jstack.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jstatd.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/java.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jstat.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jinfo.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/javap.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jarsigner.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jdb.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jmap.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jar.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/rmic.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/unpack200.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/rmid.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/javadoc.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jconsole.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/rmiregistry.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/serialver.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jcmd.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/javac.1
jdk-11.0.28+6/man/ja_JP.UTF-8/man1/jps.1
jdk-11.0.28+6/man/ja
jdk-11.0.28+6/NOTICE
jdk-11.0.28+6/legal/
jdk-11.0.28+6/legal/jdk.scripting.nashorn/
jdk-11.0.28+6/legal/jdk.scripting.nashorn/double-conversion.md
jdk-11.0.28+6/legal/jdk.scripting.nashorn/joni.md
jdk-11.0.28+6/legal/jdk.scripting.nashorn/LICENSE
jdk-11.0.28+6/legal/jdk.scripting.nashorn/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.scripting.nashorn/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.internal.le/
jdk-11.0.28+6/legal/jdk.internal.le/jline.md
jdk-11.0.28+6/legal/jdk.internal.le/LICENSE
jdk-11.0.28+6/legal/jdk.internal.le/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.internal.le/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jdi/
jdk-11.0.28+6/legal/jdk.jdi/LICENSE
jdk-11.0.28+6/legal/jdk.jdi/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jdi/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.compiler/
jdk-11.0.28+6/legal/jdk.compiler/LICENSE
jdk-11.0.28+6/legal/jdk.compiler/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.compiler/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.unsupported.desktop/
jdk-11.0.28+6/legal/jdk.unsupported.desktop/LICENSE
jdk-11.0.28+6/legal/jdk.unsupported.desktop/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.unsupported.desktop/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.sctp/
jdk-11.0.28+6/legal/jdk.sctp/LICENSE
jdk-11.0.28+6/legal/jdk.sctp/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.sctp/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.security.auth/
jdk-11.0.28+6/legal/jdk.security.auth/LICENSE
jdk-11.0.28+6/legal/jdk.security.auth/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.security.auth/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.rmic/
jdk-11.0.28+6/legal/jdk.rmic/LICENSE
jdk-11.0.28+6/legal/jdk.rmic/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.rmic/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.aot/
jdk-11.0.28+6/legal/jdk.aot/LICENSE
jdk-11.0.28+6/legal/jdk.aot/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.aot/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.dynalink/
jdk-11.0.28+6/legal/jdk.dynalink/dynalink.md
jdk-11.0.28+6/legal/jdk.dynalink/LICENSE
jdk-11.0.28+6/legal/jdk.dynalink/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.dynalink/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.management.jfr/
jdk-11.0.28+6/legal/jdk.management.jfr/LICENSE
jdk-11.0.28+6/legal/jdk.management.jfr/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.management.jfr/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.internal.vm.compiler.management/
jdk-11.0.28+6/legal/jdk.internal.vm.compiler.management/LICENSE
jdk-11.0.28+6/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jlink/
jdk-11.0.28+6/legal/jdk.jlink/LICENSE
jdk-11.0.28+6/legal/jdk.jlink/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jlink/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.internal.vm.compiler/
jdk-11.0.28+6/legal/jdk.internal.vm.compiler/LICENSE
jdk-11.0.28+6/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.sql.rowset/
jdk-11.0.28+6/legal/java.sql.rowset/LICENSE
jdk-11.0.28+6/legal/java.sql.rowset/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.sql.rowset/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.pack/
jdk-11.0.28+6/legal/jdk.pack/LICENSE
jdk-11.0.28+6/legal/jdk.pack/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.pack/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.net/
jdk-11.0.28+6/legal/jdk.net/LICENSE
jdk-11.0.28+6/legal/jdk.net/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.net/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jshell/
jdk-11.0.28+6/legal/jdk.jshell/LICENSE
jdk-11.0.28+6/legal/jdk.jshell/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jshell/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.instrument/
jdk-11.0.28+6/legal/java.instrument/LICENSE
jdk-11.0.28+6/legal/java.instrument/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.instrument/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.hotspot.agent/
jdk-11.0.28+6/legal/jdk.hotspot.agent/LICENSE
jdk-11.0.28+6/legal/jdk.hotspot.agent/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.hotspot.agent/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.internal.vm.ci/
jdk-11.0.28+6/legal/jdk.internal.vm.ci/LICENSE
jdk-11.0.28+6/legal/jdk.internal.vm.ci/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.internal.vm.ci/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.naming.ldap/
jdk-11.0.28+6/legal/jdk.naming.ldap/LICENSE
jdk-11.0.28+6/legal/jdk.naming.ldap/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.naming.ldap/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.xml.crypto/
jdk-11.0.28+6/legal/java.xml.crypto/santuario.md
jdk-11.0.28+6/legal/java.xml.crypto/LICENSE
jdk-11.0.28+6/legal/java.xml.crypto/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.xml.crypto/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.naming.rmi/
jdk-11.0.28+6/legal/jdk.naming.rmi/LICENSE
jdk-11.0.28+6/legal/jdk.naming.rmi/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.naming.rmi/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.management/
jdk-11.0.28+6/legal/java.management/LICENSE
jdk-11.0.28+6/legal/java.management/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.management/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.rmi/
jdk-11.0.28+6/legal/java.rmi/LICENSE
jdk-11.0.28+6/legal/java.rmi/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.rmi/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jconsole/
jdk-11.0.28+6/legal/jdk.jconsole/LICENSE
jdk-11.0.28+6/legal/jdk.jconsole/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jconsole/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jsobject/
jdk-11.0.28+6/legal/jdk.jsobject/LICENSE
jdk-11.0.28+6/legal/jdk.jsobject/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jsobject/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.scripting/
jdk-11.0.28+6/legal/java.scripting/LICENSE
jdk-11.0.28+6/legal/java.scripting/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.scripting/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jfr/
jdk-11.0.28+6/legal/jdk.jfr/LICENSE
jdk-11.0.28+6/legal/jdk.jfr/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jfr/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.crypto.ec/
jdk-11.0.28+6/legal/jdk.crypto.ec/ecc.md
jdk-11.0.28+6/legal/jdk.crypto.ec/LICENSE
jdk-11.0.28+6/legal/jdk.crypto.ec/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.crypto.ec/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jcmd/
jdk-11.0.28+6/legal/jdk.jcmd/LICENSE
jdk-11.0.28+6/legal/jdk.jcmd/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jcmd/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jstatd/
jdk-11.0.28+6/legal/jdk.jstatd/LICENSE
jdk-11.0.28+6/legal/jdk.jstatd/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jstatd/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.zipfs/
jdk-11.0.28+6/legal/jdk.zipfs/LICENSE
jdk-11.0.28+6/legal/jdk.zipfs/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.zipfs/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.naming/
jdk-11.0.28+6/legal/java.naming/LICENSE
jdk-11.0.28+6/legal/java.naming/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.naming/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.management.rmi/
jdk-11.0.28+6/legal/java.management.rmi/LICENSE
jdk-11.0.28+6/legal/java.management.rmi/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.management.rmi/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.datatransfer/
jdk-11.0.28+6/legal/java.datatransfer/LICENSE
jdk-11.0.28+6/legal/java.datatransfer/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.datatransfer/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.desktop/
jdk-11.0.28+6/legal/java.desktop/colorimaging.md
jdk-11.0.28+6/legal/java.desktop/giflib.md
jdk-11.0.28+6/legal/java.desktop/LICENSE
jdk-11.0.28+6/legal/java.desktop/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.desktop/jpeg.md
jdk-11.0.28+6/legal/java.desktop/lcms.md
jdk-11.0.28+6/legal/java.desktop/libpng.md
jdk-11.0.28+6/legal/java.desktop/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.desktop/harfbuzz.md
jdk-11.0.28+6/legal/java.desktop/xwd.md
jdk-11.0.28+6/legal/java.desktop/mesa3d.md
jdk-11.0.28+6/legal/jdk.javadoc/
jdk-11.0.28+6/legal/jdk.javadoc/LICENSE
jdk-11.0.28+6/legal/jdk.javadoc/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.javadoc/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.javadoc/jszip.md
jdk-11.0.28+6/legal/jdk.javadoc/jquery.md
jdk-11.0.28+6/legal/jdk.javadoc/pako.md
jdk-11.0.28+6/legal/jdk.javadoc/jqueryUI.md
jdk-11.0.28+6/legal/java.smartcardio/
jdk-11.0.28+6/legal/java.smartcardio/LICENSE
jdk-11.0.28+6/legal/java.smartcardio/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.smartcardio/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.smartcardio/pcsclite.md
jdk-11.0.28+6/legal/jdk.attach/
jdk-11.0.28+6/legal/jdk.attach/LICENSE
jdk-11.0.28+6/legal/jdk.attach/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.attach/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.internal.opt/
jdk-11.0.28+6/legal/jdk.internal.opt/jopt-simple.md
jdk-11.0.28+6/legal/jdk.internal.opt/LICENSE
jdk-11.0.28+6/legal/jdk.internal.opt/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.internal.opt/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.logging/
jdk-11.0.28+6/legal/java.logging/LICENSE
jdk-11.0.28+6/legal/java.logging/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.logging/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.se/
jdk-11.0.28+6/legal/java.se/LICENSE
jdk-11.0.28+6/legal/java.se/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.se/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.charsets/
jdk-11.0.28+6/legal/jdk.charsets/LICENSE
jdk-11.0.28+6/legal/jdk.charsets/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.charsets/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.security.sasl/
jdk-11.0.28+6/legal/java.security.sasl/LICENSE
jdk-11.0.28+6/legal/java.security.sasl/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.security.sasl/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.accessibility/
jdk-11.0.28+6/legal/jdk.accessibility/LICENSE
jdk-11.0.28+6/legal/jdk.accessibility/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.accessibility/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.management/
jdk-11.0.28+6/legal/jdk.management/LICENSE
jdk-11.0.28+6/legal/jdk.management/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.management/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.unsupported/
jdk-11.0.28+6/legal/jdk.unsupported/LICENSE
jdk-11.0.28+6/legal/jdk.unsupported/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.unsupported/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.localedata/
jdk-11.0.28+6/legal/jdk.localedata/LICENSE
jdk-11.0.28+6/legal/jdk.localedata/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.localedata/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.localedata/cldr.md
jdk-11.0.28+6/legal/jdk.localedata/thaidict.md
jdk-11.0.28+6/legal/jdk.jartool/
jdk-11.0.28+6/legal/jdk.jartool/LICENSE
jdk-11.0.28+6/legal/jdk.jartool/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jartool/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jdeps/
jdk-11.0.28+6/legal/jdk.jdeps/LICENSE
jdk-11.0.28+6/legal/jdk.jdeps/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jdeps/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.internal.ed/
jdk-11.0.28+6/legal/jdk.internal.ed/LICENSE
jdk-11.0.28+6/legal/jdk.internal.ed/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.internal.ed/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.editpad/
jdk-11.0.28+6/legal/jdk.editpad/LICENSE
jdk-11.0.28+6/legal/jdk.editpad/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.editpad/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.httpserver/
jdk-11.0.28+6/legal/jdk.httpserver/LICENSE
jdk-11.0.28+6/legal/jdk.httpserver/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.httpserver/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.jdwp.agent/
jdk-11.0.28+6/legal/jdk.jdwp.agent/LICENSE
jdk-11.0.28+6/legal/jdk.jdwp.agent/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.jdwp.agent/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.xml.dom/
jdk-11.0.28+6/legal/jdk.xml.dom/LICENSE
jdk-11.0.28+6/legal/jdk.xml.dom/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.xml.dom/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.base/
jdk-11.0.28+6/legal/java.base/unicode.md
jdk-11.0.28+6/legal/java.base/icu.md
jdk-11.0.28+6/legal/java.base/c-libutl.md
jdk-11.0.28+6/legal/java.base/LICENSE
jdk-11.0.28+6/legal/java.base/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.base/siphash.md
jdk-11.0.28+6/legal/java.base/zlib.md
jdk-11.0.28+6/legal/java.base/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.base/cldr.md
jdk-11.0.28+6/legal/java.base/public_suffix.md
jdk-11.0.28+6/legal/java.base/asm.md
jdk-11.0.28+6/legal/java.base/aes.md
jdk-11.0.28+6/legal/java.security.jgss/
jdk-11.0.28+6/legal/java.security.jgss/LICENSE
jdk-11.0.28+6/legal/java.security.jgss/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.security.jgss/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.sql/
jdk-11.0.28+6/legal/java.sql/LICENSE
jdk-11.0.28+6/legal/java.sql/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.sql/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.xml/
jdk-11.0.28+6/legal/java.xml/dom.md
jdk-11.0.28+6/legal/java.xml/bcel.md
jdk-11.0.28+6/legal/java.xml/LICENSE
jdk-11.0.28+6/legal/java.xml/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.xml/jcup.md
jdk-11.0.28+6/legal/java.xml/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.xml/xerces.md
jdk-11.0.28+6/legal/java.xml/xalan.md
jdk-11.0.28+6/legal/jdk.naming.dns/
jdk-11.0.28+6/legal/jdk.naming.dns/LICENSE
jdk-11.0.28+6/legal/jdk.naming.dns/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.naming.dns/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.scripting.nashorn.shell/
jdk-11.0.28+6/legal/jdk.scripting.nashorn.shell/LICENSE
jdk-11.0.28+6/legal/jdk.scripting.nashorn.shell/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.scripting.nashorn.shell/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.crypto.cryptoki/
jdk-11.0.28+6/legal/jdk.crypto.cryptoki/LICENSE
jdk-11.0.28+6/legal/jdk.crypto.cryptoki/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.crypto.cryptoki/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.crypto.cryptoki/pkcs11wrapper.md
jdk-11.0.28+6/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md
jdk-11.0.28+6/legal/java.net.http/
jdk-11.0.28+6/legal/java.net.http/LICENSE
jdk-11.0.28+6/legal/java.net.http/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.net.http/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.security.jgss/
jdk-11.0.28+6/legal/jdk.security.jgss/LICENSE
jdk-11.0.28+6/legal/jdk.security.jgss/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.security.jgss/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.internal.jvmstat/
jdk-11.0.28+6/legal/jdk.internal.jvmstat/LICENSE
jdk-11.0.28+6/legal/jdk.internal.jvmstat/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.internal.jvmstat/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.prefs/
jdk-11.0.28+6/legal/java.prefs/LICENSE
jdk-11.0.28+6/legal/java.prefs/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.prefs/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/jdk.management.agent/
jdk-11.0.28+6/legal/jdk.management.agent/LICENSE
jdk-11.0.28+6/legal/jdk.management.agent/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/jdk.management.agent/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.compiler/
jdk-11.0.28+6/legal/java.compiler/LICENSE
jdk-11.0.28+6/legal/java.compiler/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.compiler/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/legal/java.transaction.xa/
jdk-11.0.28+6/legal/java.transaction.xa/LICENSE
jdk-11.0.28+6/legal/java.transaction.xa/ASSEMBLY_EXCEPTION
jdk-11.0.28+6/legal/java.transaction.xa/ADDITIONAL_LICENSE_INFO
jdk-11.0.28+6/lib/
jdk-11.0.28+6/lib/libawt_xawt.so
jdk-11.0.28+6/lib/server/
jdk-11.0.28+6/lib/server/libjvm.so
jdk-11.0.28+6/lib/server/Xusage.txt
jdk-11.0.28+6/lib/server/libjsig.so
jdk-11.0.28+6/lib/jexec
jdk-11.0.28+6/lib/psfontj2d.properties
jdk-11.0.28+6/lib/libjaas.so
jdk-11.0.28+6/lib/libinstrument.so
jdk-11.0.28+6/lib/libprefs.so
jdk-11.0.28+6/lib/libverify.so
jdk-11.0.28+6/lib/modules
jdk-11.0.28+6/lib/tzdb.dat
jdk-11.0.28+6/lib/libjimage.so
jdk-11.0.28+6/lib/libjavajpeg.so
jdk-11.0.28+6/lib/libextnet.so
jdk-11.0.28+6/lib/libfontmanager.so
jdk-11.0.28+6/lib/libsctp.so
jdk-11.0.28+6/lib/libunpack.so
jdk-11.0.28+6/lib/libj2gss.so
jdk-11.0.28+6/lib/libdt_socket.so
jdk-11.0.28+6/lib/src.zip
jdk-11.0.28+6/lib/libattach.so
jdk-11.0.28+6/lib/libawt_headless.so
jdk-11.0.28+6/lib/libjawt.so
jdk-11.0.28+6/lib/libsplashscreen.so
jdk-11.0.28+6/lib/liblcms.so
jdk-11.0.28+6/lib/jrt-fs.jar
jdk-11.0.28+6/lib/ct.sym
jdk-11.0.28+6/lib/librmi.so
jdk-11.0.28+6/lib/libsunec.so
jdk-11.0.28+6/lib/libj2pkcs11.so
jdk-11.0.28+6/lib/jfr/
jdk-11.0.28+6/lib/jfr/profile.jfc
jdk-11.0.28+6/lib/jfr/default.jfc
jdk-11.0.28+6/lib/classlist
jdk-11.0.28+6/lib/libmanagement_ext.so
jdk-11.0.28+6/lib/jspawnhelper
jdk-11.0.28+6/lib/jli/
jdk-11.0.28+6/lib/jli/libjli.so
jdk-11.0.28+6/lib/libjava.so
jdk-11.0.28+6/lib/libawt.so
jdk-11.0.28+6/lib/libmanagement.so
jdk-11.0.28+6/lib/libmlib_image.so
jdk-11.0.28+6/lib/security/
jdk-11.0.28+6/lib/security/public_suffix_list.dat
jdk-11.0.28+6/lib/security/blocked.certs
jdk-11.0.28+6/lib/security/default.policy
jdk-11.0.28+6/lib/security/cacerts
jdk-11.0.28+6/lib/libzip.so
jdk-11.0.28+6/lib/libmanagement_agent.so
jdk-11.0.28+6/lib/libjsig.so
jdk-11.0.28+6/lib/libnet.so
jdk-11.0.28+6/lib/psfont.properties.ja
jdk-11.0.28+6/lib/libnio.so
jdk-11.0.28+6/lib/libjdwp.so
jdk-11.0.28+6/lib/libjsound.so
jdk-11.0.28+6/lib/libj2pcsc.so
jdk-11.0.28+6/lib/jvm.cfg
jdk-11.0.28+6/lib/libsaproc.so
jdk-11.0.28+6/jmods/
jdk-11.0.28+6/jmods/java.compiler.jmod
jdk-11.0.28+6/jmods/java.smartcardio.jmod
jdk-11.0.28+6/jmods/java.logging.jmod
jdk-11.0.28+6/jmods/jdk.crypto.ec.jmod
jdk-11.0.28+6/jmods/jdk.editpad.jmod
jdk-11.0.28+6/jmods/jdk.crypto.cryptoki.jmod
jdk-11.0.28+6/jmods/jdk.jcmd.jmod
jdk-11.0.28+6/jmods/jdk.unsupported.desktop.jmod
jdk-11.0.28+6/jmods/jdk.scripting.nashorn.shell.jmod
jdk-11.0.28+6/jmods/jdk.pack.jmod
jdk-11.0.28+6/jmods/jdk.jdwp.agent.jmod
jdk-11.0.28+6/jmods/jdk.internal.ed.jmod
jdk-11.0.28+6/jmods/jdk.aot.jmod
jdk-11.0.28+6/jmods/jdk.internal.vm.ci.jmod
jdk-11.0.28+6/jmods/jdk.compiler.jmod
jdk-11.0.28+6/jmods/jdk.naming.dns.jmod
jdk-11.0.28+6/jmods/jdk.internal.jvmstat.jmod
jdk-11.0.28+6/jmods/jdk.jsobject.jmod
jdk-11.0.28+6/jmods/java.naming.jmod
jdk-11.0.28+6/jmods/java.se.jmod
jdk-11.0.28+6/jmods/jdk.jfr.jmod
jdk-11.0.28+6/jmods/java.sql.jmod
jdk-11.0.28+6/jmods/jdk.attach.jmod
jdk-11.0.28+6/jmods/java.management.jmod
jdk-11.0.28+6/jmods/jdk.jstatd.jmod
jdk-11.0.28+6/jmods/jdk.accessibility.jmod
jdk-11.0.28+6/jmods/java.scripting.jmod
jdk-11.0.28+6/jmods/java.security.jgss.jmod
jdk-11.0.28+6/jmods/jdk.internal.vm.compiler.management.jmod
jdk-11.0.28+6/jmods/jdk.jdi.jmod
jdk-11.0.28+6/jmods/java.datatransfer.jmod
jdk-11.0.28+6/jmods/jdk.xml.dom.jmod
jdk-11.0.28+6/jmods/java.instrument.jmod
jdk-11.0.28+6/jmods/jdk.localedata.jmod
jdk-11.0.28+6/jmods/java.security.sasl.jmod
jdk-11.0.28+6/jmods/java.xml.crypto.jmod
jdk-11.0.28+6/jmods/jdk.management.agent.jmod
jdk-11.0.28+6/jmods/jdk.jlink.jmod
jdk-11.0.28+6/jmods/jdk.naming.rmi.jmod
jdk-11.0.28+6/jmods/jdk.security.auth.jmod
jdk-11.0.28+6/jmods/java.prefs.jmod
jdk-11.0.28+6/jmods/java.net.http.jmod
jdk-11.0.28+6/jmods/jdk.internal.le.jmod
jdk-11.0.28+6/jmods/java.management.rmi.jmod
jdk-11.0.28+6/jmods/jdk.net.jmod
jdk-11.0.28+6/jmods/jdk.management.jmod
jdk-11.0.28+6/jmods/jdk.jshell.jmod
jdk-11.0.28+6/jmods/jdk.charsets.jmod
jdk-11.0.28+6/jmods/jdk.javadoc.jmod
jdk-11.0.28+6/jmods/jdk.sctp.jmod
jdk-11.0.28+6/jmods/jdk.internal.opt.jmod
jdk-11.0.28+6/jmods/jdk.internal.vm.compiler.jmod
jdk-11.0.28+6/jmods/jdk.security.jgss.jmod
jdk-11.0.28+6/jmods/jdk.unsupported.jmod
jdk-11.0.28+6/jmods/java.transaction.xa.jmod
jdk-11.0.28+6/jmods/jdk.httpserver.jmod
jdk-11.0.28+6/jmods/jdk.scripting.nashorn.jmod
jdk-11.0.28+6/jmods/jdk.jartool.jmod
jdk-11.0.28+6/jmods/java.sql.rowset.jmod
jdk-11.0.28+6/jmods/jdk.hotspot.agent.jmod
jdk-11.0.28+6/jmods/java.base.jmod
jdk-11.0.28+6/jmods/java.desktop.jmod
jdk-11.0.28+6/jmods/jdk.dynalink.jmod
jdk-11.0.28+6/jmods/java.xml.jmod
jdk-11.0.28+6/jmods/jdk.jconsole.jmod
jdk-11.0.28+6/jmods/jdk.management.jfr.jmod
jdk-11.0.28+6/jmods/jdk.jdeps.jmod
jdk-11.0.28+6/jmods/jdk.zipfs.jmod
jdk-11.0.28+6/jmods/java.rmi.jmod
jdk-11.0.28+6/jmods/jdk.rmic.jmod
jdk-11.0.28+6/jmods/jdk.naming.ldap.jmod
jdk-11.0.28+6/bin/
jdk-11.0.28+6/bin/jdeps
jdk-11.0.28+6/bin/jar
jdk-11.0.28+6/bin/jstack
jdk-11.0.28+6/bin/pack200
jdk-11.0.28+6/bin/rmid
jdk-11.0.28+6/bin/jlink
jdk-11.0.28+6/bin/serialver
jdk-11.0.28+6/bin/jconsole
jdk-11.0.28+6/bin/jstatd
jdk-11.0.28+6/bin/jstat
jdk-11.0.28+6/bin/javap
jdk-11.0.28+6/bin/jrunscript
jdk-11.0.28+6/bin/jdb
jdk-11.0.28+6/bin/keytool
jdk-11.0.28+6/bin/jjs
jdk-11.0.28+6/bin/javac
jdk-11.0.28+6/bin/jps
jdk-11.0.28+6/bin/jdeprscan
jdk-11.0.28+6/bin/jshell
jdk-11.0.28+6/bin/jarsigner
jdk-11.0.28+6/bin/jfr
jdk-11.0.28+6/bin/jhsdb
jdk-11.0.28+6/bin/jinfo
jdk-11.0.28+6/bin/rmiregistry
jdk-11.0.28+6/bin/unpack200
jdk-11.0.28+6/bin/jaotc
jdk-11.0.28+6/bin/rmic
jdk-11.0.28+6/bin/jimage
jdk-11.0.28+6/bin/jmod
jdk-11.0.28+6/bin/jcmd
jdk-11.0.28+6/bin/java
jdk-11.0.28+6/bin/javadoc
jdk-11.0.28+6/bin/jmap
jdk-11.0.28+6/release
[root@host1 src]# sudo tee -a /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk-11.0.28+6                        
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
export JAVA_HOME=/usr/local/jdk-11.0.28+6
export PATH=$JAVA_HOME/bin:$PATH
[root@host1 src]# source /etc/profile
[root@host1 src]# javac -version
javac 11.0.28
[root@host1 src]# sudo tar -zxvf apache-maven-3.8.6-bin.tar.gz -C /usr/local/
apache-maven-3.8.6/README.txt
apache-maven-3.8.6/LICENSE
apache-maven-3.8.6/NOTICE
apache-maven-3.8.6/lib/
apache-maven-3.8.6/lib/commons-cli.license
apache-maven-3.8.6/lib/commons-io.license
apache-maven-3.8.6/lib/commons-lang3.license
apache-maven-3.8.6/lib/guava.license
apache-maven-3.8.6/lib/guice.license
apache-maven-3.8.6/lib/jansi.license
apache-maven-3.8.6/lib/javax.annotation-api.license
apache-maven-3.8.6/lib/javax.inject.license
apache-maven-3.8.6/lib/jcl-over-slf4j.license
apache-maven-3.8.6/lib/org.eclipse.sisu.inject.license
apache-maven-3.8.6/lib/org.eclipse.sisu.plexus.license
apache-maven-3.8.6/lib/plexus-cipher.license
apache-maven-3.8.6/lib/plexus-component-annotations.license
apache-maven-3.8.6/lib/plexus-interpolation.license
apache-maven-3.8.6/lib/plexus-sec-dispatcher.license
apache-maven-3.8.6/lib/plexus-utils.license
apache-maven-3.8.6/lib/slf4j-api.license
apache-maven-3.8.6/boot/
apache-maven-3.8.6/boot/plexus-classworlds.license
apache-maven-3.8.6/lib/jansi-native/
apache-maven-3.8.6/lib/jansi-native/Windows/
apache-maven-3.8.6/lib/jansi-native/Windows/x86/
apache-maven-3.8.6/lib/jansi-native/Windows/x86_64/
apache-maven-3.8.6/lib/jansi-native/Windows/x86/jansi.dll
apache-maven-3.8.6/lib/jansi-native/Windows/x86_64/jansi.dll
apache-maven-3.8.6/bin/m2.conf
apache-maven-3.8.6/bin/mvn.cmd
apache-maven-3.8.6/bin/mvnDebug.cmd
apache-maven-3.8.6/bin/mvn
apache-maven-3.8.6/bin/mvnDebug
apache-maven-3.8.6/bin/mvnyjp
apache-maven-3.8.6/conf/
apache-maven-3.8.6/conf/logging/
apache-maven-3.8.6/conf/logging/simplelogger.properties
apache-maven-3.8.6/conf/settings.xml
apache-maven-3.8.6/conf/toolchains.xml
apache-maven-3.8.6/lib/ext/
apache-maven-3.8.6/lib/jansi-native/
apache-maven-3.8.6/lib/ext/README.txt
apache-maven-3.8.6/lib/jansi-native/README.txt
apache-maven-3.8.6/boot/plexus-classworlds-2.6.0.jar
apache-maven-3.8.6/lib/maven-embedder-3.8.6.jar
apache-maven-3.8.6/lib/maven-settings-3.8.6.jar
apache-maven-3.8.6/lib/maven-settings-builder-3.8.6.jar
apache-maven-3.8.6/lib/maven-plugin-api-3.8.6.jar
apache-maven-3.8.6/lib/maven-model-3.8.6.jar
apache-maven-3.8.6/lib/maven-model-builder-3.8.6.jar
apache-maven-3.8.6/lib/maven-builder-support-3.8.6.jar
apache-maven-3.8.6/lib/maven-resolver-api-1.6.3.jar
apache-maven-3.8.6/lib/maven-resolver-util-1.6.3.jar
apache-maven-3.8.6/lib/maven-shared-utils-3.3.4.jar
apache-maven-3.8.6/lib/commons-io-2.6.jar
apache-maven-3.8.6/lib/guice-4.2.2-no_aop.jar
apache-maven-3.8.6/lib/guava-25.1-android.jar
apache-maven-3.8.6/lib/javax.inject-1.jar
apache-maven-3.8.6/lib/javax.annotation-api-1.2.jar
apache-maven-3.8.6/lib/plexus-utils-3.3.1.jar
apache-maven-3.8.6/lib/plexus-sec-dispatcher-2.0.jar
apache-maven-3.8.6/lib/plexus-cipher-2.0.jar
apache-maven-3.8.6/lib/slf4j-api-1.7.36.jar
apache-maven-3.8.6/lib/commons-lang3-3.8.1.jar
apache-maven-3.8.6/lib/maven-core-3.8.6.jar
apache-maven-3.8.6/lib/maven-repository-metadata-3.8.6.jar
apache-maven-3.8.6/lib/maven-artifact-3.8.6.jar
apache-maven-3.8.6/lib/maven-resolver-provider-3.8.6.jar
apache-maven-3.8.6/lib/maven-resolver-impl-1.6.3.jar
apache-maven-3.8.6/lib/maven-resolver-spi-1.6.3.jar
apache-maven-3.8.6/lib/org.eclipse.sisu.inject-0.3.5.jar
apache-maven-3.8.6/lib/plexus-interpolation-1.26.jar
apache-maven-3.8.6/lib/plexus-component-annotations-2.1.0.jar
apache-maven-3.8.6/lib/maven-compat-3.8.6.jar
apache-maven-3.8.6/lib/wagon-provider-api-3.5.1.jar
apache-maven-3.8.6/lib/org.eclipse.sisu.plexus-0.3.5.jar
apache-maven-3.8.6/lib/commons-cli-1.4.jar
apache-maven-3.8.6/lib/wagon-http-3.5.1-shaded.jar
apache-maven-3.8.6/lib/jcl-over-slf4j-1.7.36.jar
apache-maven-3.8.6/lib/wagon-file-3.5.1.jar
apache-maven-3.8.6/lib/maven-resolver-connector-basic-1.6.3.jar
apache-maven-3.8.6/lib/maven-resolver-transport-wagon-1.6.3.jar
apache-maven-3.8.6/lib/maven-slf4j-provider-3.8.6.jar
apache-maven-3.8.6/lib/jansi-2.4.0.jar
[root@host1 src]# sudo tee -a /etc/profile << EOF
export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=\$MAVEN_HOME/bin:\$PATH
EOF
export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=$MAVEN_HOME/bin:$PATH
[root@host1 src]# source /etc/profile
[root@host1 src]# mkdir -p ~/.m2
[root@host1 src]# cat > ~/.m2/settings.xml << EOF
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><mirrors><mirror><id>aliyun-internal</id><name>阿里云内网 Maven 镜像</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>*</mirrorOf></mirror></mirrors>
</settings>
EOF
[root@host1 src]# mvn -v 
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /usr/local/apache-maven-3.8.6
Java version: 11.0.28, vendor: Eclipse Adoptium, runtime: /usr/local/jdk-11.0.28+6
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "5.14.0-611.el9.x86_64", arch: "amd64", family: "unix"

        3. 安装 Docker(内网离线包方式)

[root@host1 src]# sudo tar -zxvf docker-20.10.21.tgz -C /usr/local/
docker/
docker/docker-proxy
docker/containerd
docker/dockerd
docker/runc
docker/containerd-shim
docker/docker-init
docker/containerd-shim-runc-v2
docker/ctr
docker/docker
[root@host1 src]# sudo ln -s /usr/local/docker/* /usr/bin/
ln: 无法创建符号链接 '/usr/bin/containerd': 文件已存在
ln: 无法创建符号链接 '/usr/bin/containerd-shim': 文件已存在
ln: 无法创建符号链接 '/usr/bin/containerd-shim-runc-v2': 文件已存在
ln: 无法创建符号链接 '/usr/bin/ctr': 文件已存在
ln: 无法创建符号链接 '/usr/bin/docker': 文件已存在
ln: 无法创建符号链接 '/usr/bin/dockerd': 文件已存在
ln: 无法创建符号链接 '/usr/bin/docker-proxy': 文件已存在
ln: 无法创建符号链接 '/usr/bin/runc': 文件已存在
[root@host1 src]# sudo dockerd &
[1] 726734
[root@host1 src]# INFO[2025-09-29T19:13:28.553461183+08:00] Starting up                                  
failed to start daemon, ensure docker is not running or delete /var/run/docker.pid: process with PID 1510 is still running
^C
[1]+  退出 1                sudo dockerd
[root@host1 src]# docker version
Client: Docker Engine - CommunityVersion:           28.4.0API version:       1.51Go version:        go1.24.7Git commit:        d8eb465Built:             Wed Sep  3 21:00:35 2025OS/Arch:           linux/amd64Context:           defaultServer: Docker Engine - CommunityEngine:Version:          28.4.0API version:      1.51 (minimum version 1.24)Go version:       go1.24.7Git commit:       249d679Built:            Wed Sep  3 20:57:19 2025OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.7.27GitCommit:        05044ec0a9a75232cad458027ca83437aae3f4darunc:Version:          1.2.5GitCommit:        v1.2.5-0-g59923efdocker-init:Version:          0.19.0GitCommit:        de40ad0

        从操作和输出来看,系统中已经预先安装了较新的 Docker(28.4.0 版本)并正在运行,我选择 :继续使用当前系统中的 Docker(28.4.0,推荐)

        当前 Docker 已经正常工作(docker version 输出正常),无需额外操作,可以直接使用 docker 命令(如 docker rundocker ps 等)。

二、构建 Spring Boot 应用(host1

        1. 创建项目目录与文件

[root@host1 src]# mkdir -p ~/ch08/spring-boot-hello/src/main/java/com/abc/hello
[root@host1 src]# cd ~/ch08/spring-boot-hello

        2. 编写 pom.xml(Maven 配置文件)

[root@host1 spring-boot-hello]# cat > pom.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/> <!-- 从内网 Maven 镜像拉取依赖 --></parent><groupId>com.abc</groupId><artifactId>spring-boot-hello</artifactId><version>0.0.1-SNAPSHOT</version><properties><java.version>11</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin>
EOFroject>d>ugins>

        3. 编写 Java 代码

[root@host1 spring-boot-hello]# cat > src/main/java/com/abc/hello/HelloController.java << EOF
package com.abc.hello;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/")public String hello() {return "Hello! Please test Java K8s deploy!\n";}
}
EOF[root@host1 spring-boot-hello]# cat > src/main/java/com/abc/hello/HelloApplication.java << EOF
package com.abc.hello;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class HelloApplication {public static void main(String[] args) {SpringApplication.run(HelloApplication.class, args);}
}
EOF

        4. 编写 Dockerfile(镜像构建配置)

[root@host1 spring-boot-hello]# cat > Dockerfile << EOF
FROM openjdk:11-jre                                          
COPY target/spring-boot-hello-0.0.1-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
EOF

        5. Maven 打包应用

[root@host1 spring-boot-hello]#mvn clean package
......
......
......
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/apache/maven/shared/maven-artifact-transfer/0.12.0/maven-artifact-transfer-0.12.0.jar (120 kB at 267 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm/8.0/asm-8.0.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/apache/maven/shared/maven-common-artifact-filters/3.0.1/maven-common-artifact-filters-3.0.1.jar (61 kB at 136 kB/s)
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/apache/maven/shared/maven-shared-utils/3.1.0/maven-shared-utils-3.1.0.jar (164 kB at 362 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-commons/8.0/asm-commons-8.0.jar
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-tree/8.0/asm-tree-8.0.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar (26 kB at 58 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-analysis/8.0/asm-analysis-8.0.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-loader-tools/2.7.5/spring-boot-loader-tools-2.7.5.jar (249 kB at 542 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar (0 B at 0 B/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/apache/maven/shared/maven-dependency-tree/3.0.1/maven-dependency-tree-3.0.1.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/apache/maven/shared/maven-dependency-tree/3.0.1/maven-dependency-tree-3.0.1.jar (0 B at 0 B/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/vafer/jdependency/2.4.0/jdependency-2.4.0.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-analysis/8.0/asm-analysis-8.0.jar (33 kB at 64 kB/s)
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-tree/8.0/asm-tree-8.0.jar (53 kB at 101 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-util/8.0/asm-util-8.0.jar
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/guava/guava/28.2-android/guava-28.2-android.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-commons/8.0/asm-commons-8.0.jar (72 kB at 137 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm/8.0/asm-8.0.jar (122 kB at 209 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/vafer/jdependency/2.4.0/jdependency-2.4.0.jar (180 kB at 308 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar (4.6 kB at 7.9 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/ow2/asm/asm-util/8.0/asm-util-8.0.jar (85 kB at 144 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar (5.9 kB at 9.1 kB/s)
Downloading from aliyun-internal: https://maven.aliyun.com/repository/public/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar (2.2 kB at 3.4 kB/s)
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar (8.8 kB at 13 kB/s)
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar (14 kB at 21 kB/s)
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar (500 kB at 670 kB/s)
Downloaded from aliyun-internal: https://maven.aliyun.com/repository/public/com/google/guava/guava/28.2-android/guava-28.2-android.jar (2.6 MB at 3.4 MB/s)
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  36.571 s
[INFO] Finished at: 2025-09-29T19:24:49+08:00
[INFO] ------------------------------------------------------------------------
[root@host1 spring-boot-hello]# ls target/
classes            maven-archiver  spring-boot-hello-0.0.1-SNAPSHOT.jar
generated-sources  maven-status    spring-boot-hello-0.0.1-SNAPSHOT.jar.original

三、构建并推送 Docker 镜像(host1,推送到内网镜像仓库)

        1. 构建 Docker 镜像

[root@host1 spring-boot-hello]# docker build -t spring-boot-hello:1.0 .
[+] Building 12.9s (7/7) FINISHED                                                     docker:default=> [internal] load build definition from Dockerfile                                            0.0s=> => transferring dockerfile: 260B                                                            0.0s=> [internal] load metadata for docker.io/library/openjdk:11-jre                               5.7s=> [internal] load .dockerignore                                                               0.0s=> => transferring context: 2B                                                                 0.0s=> [internal] load build context                                                               0.2s=> => transferring context: 17.63MB                                                            0.2s=> [1/2] FROM docker.io/library/openjdk:11-jre@sha256:356949c3125c4fa8104745e7ea92bd995da4567  6.5s=> => resolve docker.io/library/openjdk:11-jre@sha256:356949c3125c4fa8104745e7ea92bd995da4567  0.0s=> => sha256:356949c3125c4fa8104745e7ea92bd995da4567634e6599b470d2f972d13e0e2 1.04kB / 1.04kB  0.0s=> => sha256:762d8d035c3b1c98d30c5385f394f4d762302ba9ee8e0da8c93344c688d160b2 1.58kB / 1.58kB  0.0s=> => sha256:362cda5d270e81aabfbbbaf8fe7ebcc7633f38b7952a9f6bc7ef68397662f0f9 7.51kB / 7.51kB  0.0s=> => sha256:8510da692cda60e4746c14dd90905695eade5888e2ad640706a2be9dc42a0224 5.66MB / 5.66MB  1.6s=> => sha256:b6d84395b34d8ae99a6c83b1da729fdfc0678767272973ada75ed7772572e392 211B / 211B      2.5s=> => sha256:bf03fea6c3ad764587adf11c70121a7bb47883183ea13fb6b9f73727caf2a6 45.77MB / 45.77MB  4.5s=> => extracting sha256:8510da692cda60e4746c14dd90905695eade5888e2ad640706a2be9dc42a0224       0.7s=> => extracting sha256:b6d84395b34d8ae99a6c83b1da729fdfc0678767272973ada75ed7772572e392       0.0s=> => extracting sha256:bf03fea6c3ad764587adf11c70121a7bb47883183ea13fb6b9f73727caf2a6f7       1.9s=> [2/2] COPY target/spring-boot-hello-0.0.1-SNAPSHOT.jar /app.jar                             0.5s=> exporting to image                                                                          0.1s=> => exporting layers                                                                         0.1s=> => writing image sha256:49cbed958d0a096af32f229ed67b3951e4e718cf7d89f5aa07bb493c391b4f3e    0.0s=> => naming to docker.io/library/spring-boot-hello:1.0                                        0.0s

        2. 打标签(与内网仓库地址关联)

[root@host1 spring-boot-hello]# docker tag spring-boot-hello:1.0 registry.abc.com:5000/spring-boot-hello:1.0

        3. 推送镜像到内网仓库

[root@host1 spring-boot-hello]# sudo vi /etc/hosts
[root@host1 spring-boot-hello]# sudo cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.197.9 registry.abc.com
[root@host1 spring-boot-hello]# ping 192.168.197.9
PING 192.168.197.9 (192.168.197.9) 56(84) 比特的数据。
64 比特,来自 192.168.197.9: icmp_seq=1 ttl=64 时间=0.082 毫秒
64 比特,来自 192.168.197.9: icmp_seq=2 ttl=64 时间=0.050 毫秒
^Z
[2]+  已停止               ping 192.168.197.9[root@host1 spring-boot-hello]# nc -zv 192.168.197.9 5000
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.197.9:5000.
Ncat: 0 bytes sent, 0 bytes received in 0.04 seconds.
[root@host1 spring-boot-hello]# 
[root@host1 spring-boot-hello]# sudo vi /etc/docker/daemon.json
[root@host1 spring-boot-hello]# sudo vi /etc/docker/daemon.json
[root@host1 spring-boot-hello]# sudo cat /etc/docker/daemon.json
{"registry-mirrors": ["https://9fbd5949cbc94e4a9581e33b9077c811.mirror.swr.myhuaweicloud.com","https://jnh8ca4k.mirror.aliyuncs.com"],"insecure-registries": ["192.168.197.9:5000","registry.abc.com:5000"],"live-restore": true
}
[root@host1 spring-boot-hello]# sudo systemctl restart docker
[root@host1 spring-boot-hello]# docker push registry.abc.com:5000/spring-boot-hello:1.0
The push refers to repository [registry.abc.com:5000/spring-boot-hello]
7f99c309d4fb: Pushed 
5a7e7a880634: Pushed 
3dccaa93bb0e: Pushed 
5c384ea5f752: Pushed 
293d5db30c9f: Pushed 
03127cdb479b: Pushed 
9c742cd6c7a5: Pushed 
1.0: digest: sha256:8032c429321d771b4399fb255004ee53f23bcc958f71a2e3d821ed1aea96d88a size: 1794

四、配置 Kubernetes 集群(host2,使用 kind,支持内网仓库访问)

        1. 安装 kind(内网离线包方式)

#之前安装过
[root@host2 ~]# kind version
kind v0.20.0 go1.20.4 linux/amd64

        2. 创建 kind 集群配置文件(testk8s-config.yaml)见下

        3. 创建 kind 集群

[root@host2 ~]# kubectl apply -f spring-boot-hello.yaml
service/sbdemo-svc created
deployment.apps/sbdemo-deploy created
[root@host2 ~]# kind create cluster --config testk8s-config.yaml
ERROR: failed to create cluster: error reading file: open testk8s-config.yaml: no such file or directory
[root@host2 ~]# kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:34483
CoreDNS is running at https://127.0.0.1:34483/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@host2 ~]# kind create cluster --config testk8s-config.yaml
ERROR: failed to create cluster: error reading file: open testk8s-config.yaml: no such file or directory
[root@host2 ~]# kubectl apply -f spring-boot-hello.yaml
service/sbdemo-svc created
deployment.apps/sbdemo-deploy created
[root@host2 ~]# kind create cluster --config testk8s-config.yaml
ERROR: failed to create cluster: error reading file: open testk8s-config.yaml: no such file or directory
[root@host2 ~]# kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:34483
CoreDNS is running at https://127.0.0.1:34483/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@host2 ~]# kind create cluster
Creating cluster "kind" ...✓ Ensuring node image (kindest/node:v1.27.3) 🖼 ✓ Preparing nodes 📦  ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 
Set kubectl context to "kind-kind"
You can now use your cluster with:kubectl cluster-info --context kind-kindThanks for using kind! 😊
[root@host2 ~]# kind create cluster --name my-new-cluster
Creating cluster "my-new-cluster" ...✓ Ensuring node image (kindest/node:v1.27.3) 🖼 ✗ Preparing nodes 📦  
Deleted nodes: ["my-new-cluster-control-plane"]
ERROR: failed to create cluster: could not find a log line that matches "Reached target .*Multi-User System.*|detected cgroup v1"
[root@host2 ~]# cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory hugetlb pids rdma misc
[root@host2 ~]# sudo vi /etc/docker/daemon.json
[root@host2 ~]# sudo cat /etc/docker/daemon.json
{"registry-mirrors": ["https://9fbd5949cbc94e4a9581e33b9077c811.mirror.swr.myhuaweicloud.com","https://jnh8ca4k.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://b9pmyelo.mirror.aliyuncs.com"]"exec-opts": ["native.cgroupdriver=cgroupfs"]
}[root@host2 ~]# sudo systemctl restart containerd
Failed to allocate directory watch: Too many open files
[root@host2 ~]# sudo vi /etc/docker/daemon.json
[root@host2 ~]# sudo cat /etc/docker/daemon.json
{"registry-mirrors": ["https://9fbd5949cbc94e4a9581e33b9077c811.mirror.swr.myhuaweicloud.com","https://jnh8ca4k.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://b9pmyelo.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=cgroupfs"]
}[root@host2 ~]# docker daemon - reload 2>&1 | grep -i error
[root@host2 ~]# ulimit -n 65535
[root@host2 ~]# ulimit -n
65535
[root@host2 ~]# sudo vi /etc/security/limits.conf
[root@host2 ~]# sudo cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
#
#Also note that configuration files in /etc/security/limits.d directory,
#which are read in alphabetical order, override the settings in this
#file in case the domain is the same or more specific.
#That means, for example, that setting a limit for wildcard domain here
#can be overridden with a wildcard setting in a config file in the
#subdirectory, but a user specific setting here can be overridden only
#with a user specific setting in the subdirectory.
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open file descriptors
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#
#<domain>      <type>  <item>         <value>
##*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4* soft nofile 65535
* hard nofile 65535
# End of file
[root@host2 ~]# sudo mkdir -p /etc/systemd/system/containerd.service.d/
[root@host2 ~]# sudo vi /etc/systemd/system/containerd.service.d/override.conf
[root@host2 ~]# sudo cat /etc/systemd/system/containerd.service.d/override.conf
[Service]
# 为 containerd 进程设置最大打开文件数
LimitNOFILE=65535
[root@host2 ~]# sudo systemctl daemon-reload
[root@host2 ~]# sudo systemctl restart containerd
Failed to allocate directory watch: Too many open files
[root@host2 ~]# sudo systemctl status containerd
● containerd.service - containerd container runtimeLoaded: loaded (/usr/lib/systemd/system/containerd.service; disabled; preset: disabled)Drop-In: /etc/systemd/system/containerd.service.d└─override.confActive: active (running) since Mon 2025-09-29 19:56:25 CST; 12s agoDocs: https://containerd.ioProcess: 720607 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)Main PID: 720613 (containerd)Tasks: 46Memory: 101.4M (peak: 110.5M)CPU: 290msCGroup: /system.slice/containerd.service├─ 591564 /usr/bin/containerd-shim-runc-v2 -namespace moby -id db8b0d32b79e39b72515d616>├─ 720613 /usr/bin/containerd├─2500672 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 9d7404c5602e9994d4156053>└─2500715 /usr/bin/containerd-shim-runc-v2 -namespace moby -id f264d9b021fde908eff107ae>9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.523433710+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.523468829+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.523500466+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.523524233+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.523556305+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.523583142+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.525225338+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.525365991+08:00" level=info msg=>
9月 29 19:56:25 host2 containerd[720613]: time="2025-09-29T19:56:25.526204898+08:00" level=info msg=>
9月 29 19:56:25 host2 systemd[1]: Started containerd container runtime.[1]+  已停止               sudo systemctl status containerd
[root@host2 ~]# sudo systemctl restart docker
Failed to allocate directory watch: Too many open files
^Z
[2]+  已停止               sudo systemctl restart docker
[root@host2 ~]# docker info | grep "Cgroup Driver"Cgroup Driver: cgroupfs

        从操作和输出来看,当前环境已存在一个 Kubernetes 集群kubectl cluster-info 显示控制平面正常运行),而执行 kind create cluster 时因 testk8s-config.yaml 文件不存在 导致失败。我选择创建新的 Kind 集群--不需要自定义集群配置(快速创建)

五、部署 Spring Boot 应用到 Kubernetes(host2

        1. 编写 Kubernetes 资源配置文件(spring-boot-hello.yaml

[root@host2 ~]# cat > spring-boot-hello.yaml << EOF
apiVersion: v1cat > spring-boot-hello.yaml << EOF
apiVersion: v1
kind: Service
metadata:bdemo-svcname: sbdemo-svc
spec:e: NodePorttype: NodePortports:: sbdemo- name: sbdemoport: 808030008  # 节点暴露端口nodePort: 30008  # 节点暴露端口targetPort: 8080 # 容器端口protocol: TCPselector:demoapp: sbdemo
---Version: apps/v1
apiVersion: apps/v1
kind: Deployment
metadata:bdemo-deployname: sbdemo-deploy
spec:licas: 1replicas: 1selector:bels:matchLabels:oapp: sbdemotemplate:a:metadata:labels:sbdemoapp: sbdemospec:tainers:containers:emo- name: sbdemotry.abc.com:5000/spring-boot-hello:1.0  # 内网镜像地址image: registry.abc.com:5000/spring-boot-hello:1.0  # 内网镜像地址imagePullPolicy: Always  # 始终拉取镜像ports:ainerPort: 8080- containerPort: 8080
EOF

        2. 应用配置文件

[root@host2 ~]# kubectl apply -f spring-boot-hello.yaml
service/sbdemo-svc created
deployment.apps/sbdemo-deploy created

        3. 验证部署

[root@host2 ~]# kubectl get svc sbdemo-svc
NAME         TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
sbdemo-svc   NodePort   10.96.58.89   <none>        8080:30008/TCP   23s
[root@host2 ~]# curl 127.0.0.1:30008
Hello! Please test Java K8s deploy!

        4. 清理环境(可选)

[root@host2 ~]# kubectl delete -f spring-boot-hello.yaml
service "sbdemo-svc" deleted
deployment.apps "sbdemo-deploy" deleted

关键说明

  • 所有外网依赖(如 JDK、Maven、Docker 镜像、kind 二进制)均替换为内网离线包 / 仓库,确保无外网时可部署。

  • 内网镜像仓库(registry.abc.com:5000)需提前搭建(可参考 Docker Registry 内网部署文档),并确保 kind 集群内的 containerd 能访问该仓库。

  • extraMounts 挂载 host2 的 /etc/hosts,是为了让 Kubernetes 节点能解析内网仓库的域名(若使用 IP 则可省略此步骤)。

http://www.dtcms.com/a/423383.html

相关文章:

  • 不联网设备如何精确记时的
  • 网站首页添加代码寄生虫seo教程
  • 黄冈网站推广策略黄浦网站建设
  • 在JavaScript / HTML中,浏览器提示 “Refused to execute inline event handler” 错误
  • 怎样做一个公司网站个人网站做商城
  • 模拟面试 - 第6轮
  • PostgreSQL WAL 日志发展史 - pg8
  • 第4篇 vs2019+QT调用SDK连接海康相机显示图片
  • 高通平台WiFi学习--WLAN Offload技术
  • 微信小程序app.js中每30秒调用一次wx.getLocation
  • 遥感云平台-GEE分块下载与拼接
  • 深圳市建设监理协会网站wordpress后台接口数据
  • UNIX下C语言编程与实践10-UNIX 动态库隐式调用:编译链接配置与路径问题排查
  • 网站虚拟主持人制作建设一个网站需要条件
  • 网站建设中文百北京住房和城乡建设局门户网站
  • uni-app 模板语法修复说明
  • OpenLayers地图交互 -- 章节十八:拖拽旋转和缩放交互详解
  • 6DOF-Euler Angles
  • 【代码随想录day 29】 力扣 860.柠檬水找零
  • 医疗智能体的技术演进与路径分析:从多模态大模型到高阶综合智能体
  • 西安制作网站的电话深圳seo网站推广方案
  • 开放、协同,2025 云栖大会“操作系统开源与 AI 进化分论坛”精彩回顾
  • Codeforces Round 1050 A. Sublime Sequence
  • 欧拉路径与欧拉回路
  • 【C语言】计算两个整数二进制表示中不同位的个数
  • T5相对位置编码
  • 网站模板分类济阳做网站多少钱
  • 怎样做网站反链绵阳网站
  • Excel转PDF不分页
  • Serverless架构:无服务器计算的全面解析与实践指南