spdx/Spdx-Java-Library

GitHub: spdx/Spdx-Java-Library

实现 SPDX 标准的 Java 对象模型与辅助函数库,用于在 Java 应用中创建、解析和管理软件许可证合规文档。

Stars: 69 | Forks: 44

# Spdx-Java-Library [![Maven Central Version](https://img.shields.io/maven-central/v/org.spdx/java-spdx-library)](https://central.sonatype.com/artifact/org.spdx/java-spdx-library) [![javadoc](https://javadoc.io/badge2/org.spdx/java-spdx-library/javadoc.svg)](https://javadoc.io/doc/org.spdx/java-spdx-library) ![使用 Maven 的 Java CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/0c/0ca2631124b589879b1d0d0a2234d5f1e0a8ee923ef16b0fbba5469088a180e6.svg) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=java-spdx-library&metric=bugs)](https://sonarcloud.io/dashboard?id=java-spdx-library) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=java-spdx-library&metric=security_rating)](https://sonarcloud.io/dashboard?id=java-spdx-library) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=java-spdx-library&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=java-spdx-library) [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=java-spdx-library&metric=sqale_index)](https://sonarcloud.io/dashboard?id=java-spdx-library) Spdx-Java-Library 是一个 Java 库,它实现了 SPDX 的 Java 对象模型并提供了一些实用的辅助函数。 该库可以在 Maven Central 中找到,名称为 [`org.spdx:java-spdx-library`](https://central.sonatype.com/artifact/org.spdx/java-spdx-library) (注意单词 "java-spdx" 的顺序)。 如果您使用的是 Maven,可以在您的 POM 文件中添加以下依赖项: ``` org.spdx java-spdx-library [2.0,3.0) ``` 请参阅 [GETTING-STARTED.md](GETTING-STARTED.md) 文件以获取安装 说明以及了解在不同场景下如何入门。 ## 目录 - [库版本兼容性](#library-version-compatibility) - [API 文档](#api-documentation) - [存储接口](#storage-interface) - [存储接口使用](#storage-interface-usage) - [多线程注意事项](#multi-threaded-considerations) - [配置选项](#configuration-options) - [初始化](#initialization) - [针对 Spec 新版本的更新](#update-for-new-versions-of-the-spec) - [贡献](#contributing) ## 库版本兼容性 由于 SPDX 3.0 中引入的破坏性变更,库版本 2.0.0 及更高版本与该库的早期版本不兼容。 但是,该库同时支持 SPDX 规范的 2.X 和 3.X 版本。 有关库的升级说明,请参阅 [README-V3-UPGRADE.md](README-V3-UPGRADE.md)。 ## API 文档 [![SPDX Java 库家族图](https://raw.githubusercontent.com/spdx/Spdx-Java-Library/master/spdx-java-lib-family.png)](./spdx-java-lib-family.png) 以下是 SPDX Java 库家族的 API 文档链接。 "release" 指向该库最新稳定版本的 API 文档,而 "dev" 指向每次该库的 GitHub 存储库发生更新时生成的 API 文档。 | 库 | 描述 | 支持的 SPDX 版本 | 支持的 SPDX 版本 | 文档 (release) | 文档 (dev) | |-|-|-|-|-|-| | [java-spdx-library][lib-gh] | 实现 SPDX Java 对象模型和辅助函数的核心库。 | 2.X | 3.X | [release][lib-docr] | [dev][lib-docd] | | [spdx-java-core][core-gh] | 用于 SPDX Java 库的核心实用程序和共享功能。 | 2.X | 3.X | [release][core-docr] | [dev][core-docd] | | Model | | | | | | | [spdx-java-model-2_X][model2-gh] | SPDX 2.X 规范的模型实现。 | 2.X | | [release][model2-docr] | [dev][model2-docd] | | [spdx-java-model-3_0][model3-gh] | SPDX 3.0 规范的模型实现。 | | 3.X | [release][model3-docr] | | | Model store | | | | | | | [spdx-jackson-store][jackson-gh] | 基于 Jackson Databind 的 SPDX 对象存储实现。支持 JSON、YAML 和 XML 格式。 | 2.X | | [release][jackson-docr] | [dev][jackson-docd] | | [spdx-rdf-store][rdf-gh] | 基于 RDF 的 SPDX 对象存储实现。 | 2.X | | [release][rdf-docr] | [dev][rdf-docd] | | [spdx-spreadsheet-store][spreadsheet-gh] | 基于电子表格的 SPDX 对象存储实现。支持 XLS 和 XLSX 格式。 | 2.X | | [release][spreadsheet-docr] | [dev][spreadsheet-docd] | | [spdx-tagvalue-store][tagvalue-gh] | 基于标签值文件 (Tag-value-file) 的 SPDX 对象存储实现。 | 2.X | | [release][tagvalue-docr] | [dev][tagvalue-docd] | | [spdx-v3jsonld-store][v3jsonld-gh] | 基于 JSON-LD 的 SPDX 3 对象存储实现。 | | 3.X | [release][v3jsonld-docr] | [dev][v3jsonld-docd] | | Tools | | | | | | | [spdx-model-to-java][genjava-gh] | 从 SPDX 3 模型文件生成 Java 源文件。用于 spdx-java-model-3_0。 | | 3.X | | [dev][genjava-docd] | | [spdx-maven-plugin][maven-gh] | 为 Maven POM 文件中描述的 artifact 生成 SPDX 文档的 Maven 插件。 | 2.X | 3.X | [release][maven-docr] | [dev][maven-docd] | | [tools-java][tools-gh] | 用于处理 SPDX 文档的命令行工具。 | 2.X | 3.X | [release][tools-docr] | | ## 存储接口 - Spdx-Java-Library 允许对 SPDX 对象的存储进行不同的实现。 - 存储设施实现了 `org.spdx.storage.IModelStore` 接口。 这是一个底层的 SPI(服务提供者接口)。 - `ISerializableModelStore` 继承了 `IModelStore`,并支持将存储序列化和反序列化到 I/O Stream。 该接口目前用于实现 JSON、XML、YAML 和 RDF/XML 格式。 - 默认的存储接口是一个内存中的 Map,这对于该库的轻量级使用来说应该足够了。 ### 存储接口使用 - 该库最常见的用法是使用受支持的格式和 model store 之一来反序列化现有的 SPDX 文档。 - 要从头开始创建 SPDX 对象,只需创建 `org.spdx.library.model` 包中的 Java 对象。 - 该模型遵循 [SPDX 对象模型][spdx-object-model]。 - 模型对象本身是无状态的,不存储任何信息。 - 访问属性时,所有信息都是从 model store 中检索的。 - 类的存储将通过使用存储接口来存储更新。 ## 多线程注意事项 可以使用 `enterCriticalSection` 和 `leaveCriticalSection` 方法来支持多线程应用程序。 这些方法为用于 SPDX 模型对象的特定 SPDX 文档序列化了对 model store 的访问。 ## 配置选项 `Spdx-Java-Library` 可以使用 Java 系统属性或运行时 CLASSPATH 中位于 `/resources/spdx-java-library.properties` 的 Java 属性文件进行配置。 该库具有以下配置选项: 1. `org.spdx.useJARLicenseInfoOnly` - 一个布尔值,用于控制是否使用 JAR 内打包的(可能已过期的)许可证信息(true),而不是由库从 SPDX 网站下载最新文件(false)。默认为 false(始终从 SPDX 网站下载最新文件)。 2. `org.spdx.downloadCacheEnabled` - 一个布尔值,用于启用或禁用下载缓存。默认为 `false`(禁用缓存)。缓存位置根据 [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) 确定(即 `${XDG_CACHE_HOME}/Spdx-Java-Library` 或 `${HOME}/.cache/Spdx-Java-Library`)。 3. `org.spdx.downloadCacheCheckIntervalSecs` - 一个长整型数值,控制检查每个缓存条目是否过期的频率,单位为秒。默认为 86,400 秒(24 小时)。设置为 0(零)可每次都检查每个缓存条目(注意:这会导致大量的网络 I/O 并对性能产生负面影响,尽管与完全不使用缓存相比仍有显著的性能提升)。 请注意,这些配置选项只能在首次使用 Spdx-Java-Library 之前进行修改。 *一旦库被初始化,后续的更改将不会产生任何影响。* ## 初始化 在执行任何模型类方法之前,需要初始化模型版本。这可以通过调用以下方法来完成: ``` SpdxModelFactory.init(); ``` SPDX 数据存储在 "model store" 中,在 model store 之间进行复制需要一个 copy manager。 Java 库中提供了一个简单的 store。要创建简单的内存 model store 和 copy manager,请执行以下操作: ``` InMemSpdxStore modelStore = new InMemSpdxStore(); IModelCopyManager copyManager = new ModelCopyManager(); ``` 如果未指定 model store 或 copy manager,库中的许多工厂和辅助方法都会使用 `DefaultModelStore`。 `SpdxModelFactory.init()` 将为此目的创建默认值。 如果您想使用不同的默认 model store 和/或 copy manager,您可以调用: ``` DefaultModelStore.initialize(IModelStore newModelStore, String newDefaultDocumentUri, IModelCopyManager newDefaultCopyManager); ``` `newDefaultDocumentUri` 是用于 SPDX Spec 版本 2 模型对象的默认文档 URI。 重要提示:必须在调用 `SpdxModelFactory.init()` 之前或之后立即调用 `DefaultModelStore.initialize`。否则,存储在先前默认模型对象中的任何数据都将丢失。 `SpdxModelFactory.init()` 不会覆盖已经初始化的默认 model store。 ## 针对 Spec 新版本的更新 要更新 Spdx-Java-Library,以下是一个非常简短的清单: 1. 为新版本创建一个 Java .jar 文件,其中包含 `ISpdxModelInfo` 的实现——通常命名为 `SpdxModelInfoVXXX`——其中 "XXX" 是 spec 的版本。 2. 通过在该类开头的静态块中添加 `ModelRegistry.getModelRegistry().registerModel(new SpdxModelInfoVXXX());` 行来更新 SpdxModelFactory 源文件以加载模型信息。 3. 如果在复制到新模型版本或从新模型版本复制时需要进行任何转换,请将转换代码添加到 `ModelCopyConverter` 类中。 4. 更新 SpdxModelFactory 单元测试以进行最高版本检查。 ## 开发状态 稳定。 ## 贡献 欢迎提交评论和建议。 请[提交 issue][issues]以提供任何建议。 有关贡献指南,请参阅 [CONTRIBUTING.md][contributing]。
标签:JS文件枚举, SBOM, SPDX, 人工智能安全, 合规性, 域名枚举, 开发库, 开源许可, 硬件无关