ore.spongepowered.org 是一个托管 Minecraft 插件的网站。
这些插件依赖于名为 SpongeAPI 的依赖项才能运行。
给定一个已上传到我们服务的 jar 文件,并且具有将其与 SpongeAPI 上给定(semver)依赖项关联起来的元数据,我们如何确定 SpongeAPI 中是否存在影响给定插件的二进制不兼容更改?
例如发布了 API 版本 5 的插件 jar。
API 5.1 (semver) 已发布,仅包含新增内容。只要 semver 被强制执行,我们就知道由于版本控制约定,该插件可能会工作。
API 6 发布,它是 semver 主要版本,但 jar 是针对 API5 构建的,该插件有可能仍然兼容,但不能保证。我们如何测试(使用工具)插件是否引用了从 API 5 -> API 6 中删除或更改签名的代码?
了解这一点很有值(value),因为我们可以在人们使用可能不兼容的组合时发出警告。
注意:我们控制 SpongeAPI 库,而不是社区制作的插件。
最佳答案
传统的方法是使用自动化构建和持续集成工具构建系统,例如 Jenkins、Bitbucket Pipelines、Gitlab-CI 等(我假设您已经在使用 Maven 或 Gradle,因为您已经在问题中标记了它们)。
如果更改(对较新的依赖项)更改了方法签名或其他重构等任何内容,则构建将会失败。
此外,您还应该进行单元测试,以确保您的功能按预期工作。如果底层库的基本行为发生变化并影响您的功能,您也能够检测到。这将帮助您捕获功能更改,而不仅仅是编译问题。
最后,您可能想看看新的 Java 9 模块系统。在采用方面它仍然有点落后,但它可能会为您正在寻找的内容提供替代解决方案,特别是如果您也可以控制依赖项的话。
关于java - 如何确定升级依赖项是否会破坏 jar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492879/