java - 如何确定升级依赖项是否会破坏 jar 文件?

标签 java maven gradle semantic-versioning

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/

相关文章:

maven - 我可以将 Maven 配置为使用快照版本的自定义内部版本号吗

android - 无法在当前上下文中执行任务集上的 DefaultTaskContainer#register(String, Class, Action)

java - 寻找最高分

java - 使用 Play2 框架进行 Spring 属性注入(inject)

eclipse - JSF Maven Tomcat 应用程序突然停止从 eclipse 工作

java - 如何更改 Javadoc 的包以查找源文件?

java - 如何在 Spring MVC 应用程序中从 Apache Axis Web 服务调用方法?

java - SQL 服务器 "Lock request time out period exceeded".. 再次

java - 使用 Java 8 模块的 Gradle Android 项目

Android Gradle 问题 - Flutter/Dart