管理跨插件的常见依赖关系

发布于 2025-01-11 14:23:44 字数 804 浏览 0 评论 0原文

我已经实现了一个 springboot 应用程序,可以通过加载插件来扩展它。这些插件是通过从我的库(LibA)中指定的通用接口扩展来创建的,并使用 Java SPI 加载到 springboot 应用程序中。因此,LibA 是 springboot 应用程序的依赖项。

有一些不属于 springboot 应用程序的插件使用的通用库(LibB、LibC)。

当前的实现要求每个插件都是一个包含 LibA、LibB、LibC 的 fat jar,因此库的版本需要相同,否则在加载这些插件时会出现问题(例如找不到方法)。

我希望将这些通用库作为 springboot 应用程序的一部分,并让插件引用应用程序中的版本。这样做可能会产生更小的 jar,并确保插件使用的库版本的一致性。

我可以将 LibA、LibB 和 LibC 指定为 springboot 应用程序的依赖项,并让插件从其 jar 中删除它们,并且事情可能会起作用,但这仍然需要在插件的 build.gradle 中指定版本。

我想知道的是如何拥有类似于 springboot 指定和提供其依赖项的方式。其他管理此问题的方法也受到赞赏。我使用 gradle 作为构建工具。

当前

应用程序 (LibA)、插件(LibA、LibB、LibC)

我需要什么

应用程序(LibA、LibB、LibC)、插件(仅参考应用程序中的版本)

我不确定这是否是发布此问题的正确渠道,如果不合适请告诉我。

I have implemented a springboot application that can be extended by loading plugins into it. The plugins are created by extending from a common interface specified in my library (LibA) and loaded into the springboot application using Java SPI. Because of this, LibA is a dependency to the springboot application.

There are some common libraries (LibB, LibC) that are used by the plugins which are not part of the springboot application.

The current implementation requires each plugin to be a fat jar containing LibA, LibB, LibC and because of this the versions of the libs need to be the same otherwise there will be issues (such as method not found) while loading these plugins.

I would like to have these common libraries as part of the springboot application and have the plugins refer to the versions in the application. Doing this could result in smaller jars and also ensure the consistency of the version of the libraries used by the plugins.

I could specify LibA, LibB and LibC as dependencies of the springboot application and have the plugins remove them from it's jar and things might work but this would still require the versions to be specified in the plugin's build.gradle.

What I want to know is how to have something similar to the way springboot specifies and provides it's dependencies. Other ways to manage this is also appreciated. I'm using gradle as the build tool.

Current

App (LibA), plugins (LibA, LibB, LibC)

What i need

App (LibA, LibB, LibC), plugins (just refer to the versions in app)

I'm unsure if this is the correct channel to post this question, let me know if it's not suitable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文