jdk

package
v0.22.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 20, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Overview

Package jdk 提供节点本地 JDK 探测、下载安装、删除与注册表管理。

设计目标:

  • List 扫描 Worker 托管目录 (<serversDir>/jdks) 与可选系统探测路径, 通过解析 bin/java -XshowSettings:properties 拿到 major/version;
  • Install 从 Adoptium Temurin API 下载官方归档并解压;
  • Remove 删除托管目录。

所有操作只针对 Worker 本地文件系统;CP 通过 gRPC 触发并把结果写回 CP 侧 model.NodeJDK 表。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DownloadAndExtract

func DownloadAndExtract(ctx context.Context, client *http.Client, url, destDir string, report Progress, stall, interval time.Duration) error

DownloadAndExtract 下载归档到临时文件并按后缀解压到 destDir(导出薄封装,FR-299)。 供非 JDK 运行时安装器(internal/worker/runtime)复用与 JDK 完全一致的下载语义: 停滞看门狗判卡死(FR-290)、网络类失败追加可操作引导(FR-279)、zip/tar.gz 防路径逃逸。 report 可为 nil;stall/interval <= 0 时用包默认看门狗阈值(测试可注入小值)。

Types

type CatalogPackage

type CatalogPackage struct {
	Distribution string `json:"distribution"`
	MajorVersion int    `json:"majorVersion"`
	JavaVersion  string `json:"javaVersion"`
	ArchiveType  string `json:"archiveType"`
	Latest       bool   `json:"latest"`
}

CatalogPackage 是喂前端版本选择器的一条可选 JDK(FR-178)。

func FoojayCatalog

func FoojayCatalog(client *http.Client, base, distribution string, major int, arch string) ([]CatalogPackage, error)

FoojayCatalog 返回某发行版在某大版本下可选的具体 JDK 版本,喂前端版本选择器(FR-178)。 major<=0 时返回该发行版的可用大版本概览(每大版本最新一条)。client 经出站代理。

type Info

type Info struct {
	Vendor       string `json:"vendor"`
	MajorVersion int    `json:"majorVersion"`
	Version      string `json:"version"`
	Arch         string `json:"arch"`
	Path         string `json:"path"`
	Managed      bool   `json:"managed"`
}

Info Worker 本地探测到的 JDK 信息。

func Detect

func Detect(dir string) (Info, bool)

Detect 探测给定目录是否为 JDK(detectAt 的导出薄封装)。 供运行时扫描器复用同一探测语义(FR-298,见 internal/worker/runtimescan)。

func (Info) Marshal

func (i Info) Marshal() string

MarshalInfo 把 Info 转成 JSON 字符串,便于注册表持久化与跨进程传递。

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager 维护 Worker 本地 JDK 注册表(基于目录扫描,无持久化文件)。 多协程安全:Install/Remove 串行化执行以避免并发解压冲突。

func NewManager

func NewManager(rootDir string, systemDirs []string) *Manager

NewManager 创建 JDK 管理器。 rootDir 是托管目录(Install 写入的目录)。systemDirs 是探测时也会扫描 的系统路径,allow nil。

func (*Manager) Install

func (m *Manager) Install(vendor string, major int, arch, installDir, mirrorBase string) (Info, error)

Install 下载并安装指定 JDK(同步,无进度回调)。等价于 InstallWithProgress(... "", nil)。

func (*Manager) InstallWithProgress

func (m *Manager) InstallWithProgress(ctx context.Context, vendor string, major int, version, arch, installDir, mirrorBase string, progress Progress) (Info, error)

InstallWithProgress 下载并安装指定 JDK 到 installDir(默认 <rootDir>/<vendor>-<major>), 期间经 progress 回调上报下载百分比与阶段日志(FR-183 任务中心,见 ADR-040;progress 可为 nil)。 vendor/major/arch 必填;version 可选(非空时经 foojay 按具体版本解析,FR-178); mirrorBase 非空时作下载基址(CP 从平台设置下发,使镜像源真生效),为空回退本地 env/默认源。 下载完成后自动 detect。

func (*Manager) List

func (m *Manager) List() ([]Info, error)

List 扫描并返回所有 JDK 信息(managed 优先,然后系统)。

func (*Manager) Probe

func (m *Manager) Probe(path string) (Info, error)

Probe 探测某路径的 JDK 信息(FR-228):path 可为 JDK home 或 java 可执行文件,归一后 detectAt。 找不到 bin/java 或取不到版本时返回 error,供登记前自动填厂商/版本/架构(不再手填)。

func (*Manager) Remove

func (m *Manager) Remove(path string) error

Remove 删除指定路径的托管 JDK。系统 JDK 不允许通过本方法删除。

func (*Manager) RootDir

func (m *Manager) RootDir() string

RootDir 返回托管根目录。

func (*Manager) SetHTTPClient

func (m *Manager) SetHTTPClient(c *http.Client)

SetHTTPClient 注入出站 client(经进程级代理,FR-174/ADR-037):JDK 下载经此 client。 由 main 装配;不调用则下载路径回退裸默认 client(向后兼容)。 下载不设「总超时」上限,卡死由 stall 看门狗判定(FIX-4);注入 client 若设了 Timeout 会被克隆去掉。

func (*Manager) SetHTTPClientProvider

func (m *Manager) SetHTTPClientProvider(p func() *http.Client)

SetHTTPClientProvider 注入运行时出站持有者(FR-185/ADR-043):每次下载取当前 client, 使 CP 经心跳下发的代理改动即时生效。优先于 SetHTTPClient 注入的固定 client。

type Progress

type Progress func(percent int, line string)

Progress 报告安装进度的回调(FR-183,见 ADR-040)。 percent 为 0~100 的下载百分比(无 Content-Length 时可能停在某值,由 line 补充阶段说明); line 为可选的人类可读日志行(空表示仅更新百分比)。回调内不得长时间阻塞。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL