【问题标题】:Spring Dependencies - org.springframework.boot vs org.springframeworkSpring 依赖项 - org.springframework.boot 与 org.springframework
【发布时间】:2017-06-01 02:55:54
【问题描述】:

我很难确定是否需要使用 org.springframework.boot 依赖项,还是使用 org.springframework 依赖项和 非spring 依赖项 而不是在非 Spring Boot 应用程序模块中,例如共享库。

目前我有 3 个项目:

parent/
|-- client
|   |-- pom.xml
|   |-- src
|-- domain
|   |-- pom.xml
|   |-- src
|-- server
|   |-- pom.xml
|   |-- src
|-- pom.xml

我的 服务器 是一个 Spring Boot 应用程序,我用它来提供网页服务,并用作 RESTless API(通过使用两个不同的 HttpSecurity 配置)。

我的 client 是一个 Spring Boot CommandLineRunner 应用程序,它使用 服务器的 API 服务。

我创建了 Domain 模块,以便 clientserver 都可以访问相同版本的 JPA Entities。 p>


我不知道什么时候使用 org.springframework.boot 依赖,什么时候使用 org.springframeworknon-spring 依赖关系。

例如,在我的域模块中。我需要一些通常通过“org.springframework.boot::spring-boot-starter-jpa”和“org.springframework.boot::spring-boot-starter-security”获得的依赖项。但由于域模块不是 Spring Boot 应用程序。我应该使用非spring-boot:“org.spring.framework.security::spring-security-core”依赖和非spring依赖“javax.persistence::persistence-api”吗?

最佳做法是什么?什么时候使用springframework.boot依赖,什么时候使用springframework和非spring依赖?尽可能靠近春天。

【问题讨论】:

  • 启动器只不过是带有使用该功能所需的 jar 集合的 poms(它们与 Spring Boot 没有任何关系)。它们使您更容易获得依赖项。您始终可以使用单个依赖项,但您需要自己查找匹配的库(和版本)。使用您不需要的启动器。
  • @M.Deinum 一个例子,使用 spring-boot-starter-web,一个 tomcat 网络服务器启动。恐怕通过使用 spring-boot 中的其他 starter pom 我会得到类似的不需要的功能和自动配置。
  • 什么都不会启动如果你不使用一个主类包含@SpringBootAPplicationSpringBootServletInitializer的类...所以不会启动它只会引入依赖项。
  • 抱歉,忘了说这个 spring-boot-starter-web 的例子是针对客户端模块的,它使用了 spring web 库中的一些类,例如 RestTemplate。这是一个使用网络库但不想启动服务器的命令行应用程序。这可以通过使用 spring-web 或使用 spring-boot-starter-web 并排除 tomcat 服务器来实现。但这就是我的问题的重点。考虑到版本冲突和副作用,哪种方法更好?

标签: spring maven spring-boot dependency-management maven-dependency


【解决方案1】:

如果需要就使用springframework.boot依赖,不需要就不要使用。就那么简单。共享库通常不需要它们,但它可以。

请注意,尽管就像其他人所说的那样,您的 maven pom 父级并没有真正说明您实际使用了哪些依赖项,因此上面的段落没有说明这一点。建议使用相同的父级 [与使用您的模块的应用程序一样],因为它可以使依赖项版本保持同步,无论是启动还是非启动。您是说“使用 spring-boot-starter-web,一个 tomcat 网络服务器启动”,但只有当您有一个引导应用程序类并使用 spring-boot 插件时才是正确的,对于共享库,您不会有或者做。

总而言之,如果可以的话,请使用与打算使用您的库的应用相同的父级。

【讨论】:

  • 对不起,spring-boot-starter-web 的例子是关于我的客户端模块的。客户端模块,它使用 spring-boot-starter 作为 Spring Boot 命令行应用程序运行。使用 spring web 库中的各种类(RestTemplate 就是其中之一)。为此,我使用 spring-web 依赖而不是 spring-boot-starter-web 依赖来访问客户端模块中的 RestTemplate。否则它将启动 tomcat 网络服务器。我可以使用 spring-boot-starter-web 依赖项并排除 tomcat 依赖项。但这似乎比仅仅使用 spring-web 依赖更实惠
  • 您能否阐明“如果需要,请使用 springframework.boot 依赖项”的含义?据我所知,那些 Spring boot 启动器只是添加了很多依赖项,因此您也可以自己导入所有这些依赖项,所以在这种情况下,您永远不会真正“需要” org.springframework.boot 依赖项。
  • @g00glen00b 还有一些 spring-boot 特定的东西,位于org.springframework.boot 包中。这就是我所指的。我认为你在混合 Spring boot starter pom 依赖项和 Spring boot 依赖项。
猜你喜欢
  • 2011-09-17
  • 2013-03-31
  • 2016-07-04
  • 2014-01-13
  • 2019-09-02
  • 2011-10-07
  • 2021-12-27
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多