下载
SDK 提供丰富的下载能力:POM、JAR、源码、javadoc、SBOM,并支持官方校验和验证。
下载能力通过 api.Client 提供,无需认证。
基础下载
所有下载方法都基于 Maven Central 的路径约定:<groupId 转斜杠>/<artifactId>/<version>/<artifactId>-<version>[-<classifier>].<ext>
SDK 内部自动处理 GroupId 的 . → / 转换和路径拼接:
go
client := api.NewClient()
ctx := context.Background()
// 下载任意路径的文件(传完整相对路径)
data, _ := client.Download(ctx,
"org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar")
// 按 GAV + 类型快捷下载
pom, _ := client.DownloadPom(ctx, "org.apache.commons", "commons-lang3", "3.12.0")
jar, _ := client.DownloadJar(ctx, "org.apache.commons", "commons-lang3", "3.12.0")
sources, _ := client.DownloadSources(ctx, "org.apache.commons", "commons-lang3", "3.12.0")
javadoc, _ := client.DownloadJavadoc(ctx, "org.apache.commons", "commons-lang3", "3.12.0")下载到 io.Writer
直接写入文件或缓冲区,避免大文件占用内存:
go
f, _ := os.Create("commons-lang3.jar")
defer f.Close()
_ = client.DownloadToWriter(ctx,
"org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar", f)校验和验证
Maven Central 为每个文件提供官方的 SHA1/MD5/SHA256 校验和(.sha1 / .md5 / .sha256 文件)。下载后验证可保证文件完整性、防篡改。
仅下载校验和文件
go
checksum, _ := client.DownloadChecksumFile(ctx,
"org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar",
"sha256")下载文件并自动验证
一行完成"下载文件 + 下载校验和 + 本地计算哈希 + 比对"四步:
go
data, checksum, err := client.DownloadWithVerifiedChecksum(ctx,
"org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar",
"sha1")
if err != nil {
// err 会告诉你校验失败的原因
log.Fatal(err)
}
// data 已通过校验,可安全使用
fmt.Printf("下载 %d 字节,校验通过,SHA1=%s\n", len(data), checksum)选哪种哈希?
sha1—— 最常用,Maven Central 默认提供sha256—— 更安全,推荐用于安全敏感场景md5—— 速度最快,但安全性最低
SBOM 下载
SBOM(软件物料清单)描述制品的依赖关系。Maven Central 部分制品提供 CycloneDX 和 SPDX 格式:
go
// CycloneDX JSON
sbom, _ := client.DownloadCycloneDXJSON(ctx, "com.example", "my-lib", "1.0.0")
// CycloneDX XML
sbom, _ := client.DownloadCycloneDXXML(ctx, "com.example", "my-lib", "1.0.0")
// SPDX JSON
sbom, _ := client.DownloadSpdxJSON(ctx, "com.example", "my-lib", "1.0.0")批量下载
需要一次下载多个文件时,用批量方法(内部并发):
go
paths := []string{
"org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar",
"org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.pom",
}
results := client.BatchDownloadFiles(ctx, paths)
for path, data := range results {
fmt.Printf("%s: %d 字节\n", path, len(data))
}异步版本:
go
future := client.AsyncDownload(ctx, path)
// ... 做其他事 ...
data, _ := future.Await()更多批量与异步能力见 批量操作与迭代器。
从部署包下载文件
如果你已经通过 Publisher API 上传了部署包,在它发布前也可以浏览和下载其中的文件:
go
publisher := api.NewPublisherClient(api.WithPublisherToken(token))
data, _ := publisher.DownloadDeploymentFile(ctx, deploymentID, "com/example/lib/1.0/lib-1.0.jar")