我可以使用已添加为 JAR 依赖项的应用程序中的控制器吗?

Posted

技术标签:

【中文标题】我可以使用已添加为 JAR 依赖项的应用程序中的控制器吗?【英文标题】:Could I use controllers from an application that has been added as a JAR dependency? 【发布时间】:2021-07-19 22:01:00 【问题描述】:

我正在开发 Springboot 应用程序 (app_A),该应用程序持有另一个 SpringBoot 应用程序 (app_B) 的 Maven 依赖项。 在我的 app_A 中,我需要使用 App_B 中的控制器。有可能这样做吗?如果是,如何实施? 谢谢

【问题讨论】:

这取决于 B 是否也被包装为 Spring Boot 应用程序(即,一个可运行的 jar,然后否)。如果它是碰巧使用 Spring Boot 的常规 jar(即不可运行的 jar),那么可以。从你的问题来看,我会说选项1在这里起作用,所以没有。如何更改阅读the reference guide。 感谢@M.Deinum 的回复!我已经使用docs.spring.io/spring-boot/docs/current/reference/htmlsingle/… 生成了一个可以用作依赖项的 JAR。可以从 appA 访问 appB 中的类(例如使用导入)。所以我关心的是使用或调用 appB 的控制器。例如,在 appA 的 thymeleaf 代码中使用已在 appB 的控制器中设置的 Model 属性。请注意,appB 已创建一个 SpringBoot 应用程序,而不是一个模块。 【参考方案1】:

这是一个非常常见的场景,程序员需要将一些代码从现有的应用程序堆栈中分离出来。

您可以在app A depends on module Bapp A consumes app B's rest APIs 中执行此操作,但您不能让app A depends on app B。一个Springboot应用(A)永远不能依赖另一个Springboot应用(B),也就是说应用(B)不能出现在A的依赖中。

新模块

构建一个名为 artifactId module-b 的新模块。请注意,我们正在构建一个 模块 而不是 Springboot 应用程序。您不能为此使用 Spring 初始化程序。

让 App A 依赖于模块 B

在A的maven依赖中,添加模块B。

在模块 B 中编写控制器

例如,您现有的 App A 控制器被放置在 A 中,例如 com.example.foo.BarController。在模块 B 中,您编写新的控制器,例如 com.example.foo.AnotherController

【讨论】:

感谢@justthink 的回复!如果我想将我的 AppB Spring boot 应用程序更改为 Module 怎么办?我到底应该考虑什么?

以上是关于我可以使用已添加为 JAR 依赖项的应用程序中的控制器吗?的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 无法构建具有 Docker 依赖项的 JAR

在docker中使用外部jar依赖

在 OSGi 包中添加第三方 Maven 依赖项的最佳方法

gradle 在哪里保存依赖项的 jar?

如何在另一个具有更高Spring版本的Spring项目中使用具有Spring作为打包依赖项的jar?

maven依赖本地非repository中的jar包