spdx/Spdx-Java-Library
GitHub: spdx/Spdx-Java-Library
实现 SPDX 标准的 Java 对象模型与辅助函数库,用于在 Java 应用中创建、解析和管理软件许可证合规文档。
Stars: 69 | Forks: 44
# Spdx-Java-Library
[](https://central.sonatype.com/artifact/org.spdx/java-spdx-library)
[](https://javadoc.io/doc/org.spdx/java-spdx-library)

[](https://sonarcloud.io/dashboard?id=java-spdx-library)
[](https://sonarcloud.io/dashboard?id=java-spdx-library)
[](https://sonarcloud.io/dashboard?id=java-spdx-library)
[](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-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, 人工智能安全, 合规性, 域名枚举, 开发库, 开源许可, 硬件无关