什么是`spring-boot-starter` jars?

Posted

技术标签:

【中文标题】什么是`spring-boot-starter` jars?【英文标题】:What are `spring-boot-starter` jars? 【发布时间】:2015-04-01 03:37:57 【问题描述】:

在 Spring Boot 中,spring-boot-starter 的模式上有一些 jars。所有这些罐子不包含任何包。它们有什么用?

在 Maven POM 中,添加了以下依赖项:

org.springframework.boot:spring-boot-starter-web org.springframework.boot:spring-boot-starter-actuator org.springframework.boot:spring-boot-starter-security

我实际上需要哪些 Spring Boot jar 才能使用这些 jar 中的功能?我的项目没有任何依赖管理。我的项目是一个使用 Spring Security 的 Spring MVC 应用程序。

【问题讨论】:

查看文档:Spring Boot - Starter POMs @Jesper 我的问题的第二部分怎么样? 如果您不使用 Maven,那么启动 POM 对您没有用处 - 您必须将所有带有实际 Spring Boot 类的 JAR 添加到您的类路径中。我强烈建议使用 Maven 或 Gradle 等自动构建工具,因为手动跟踪所有内容很快就会变得非常麻烦。 @Jesper:我认为您应该将 cmets 作为答案,这应该是 已接受 之一,包括指向 spring-boot-starter-xxx 工件列表的链接,只是没有绑定到特定的 Spring Boot 版本,所以它不会过时:docs.spring.io/spring-boot/docs/current/reference/htmlsingle/… 【参考方案1】:

这些依赖项旨在为具有所有需要的依赖项的临时框架项目提供一个统一的入口。

它们通常应该从您的项目描述符 (pom.xml) 继承,以便您获得所有具有配置版本的父依赖项。开发者方面没有更多负担:

Starter POM 是一组方便的依赖描述符,您可以将它们包含在您的应用程序中。您可以获得所需的所有 Spring 和相关技术的一站式商店,而无需搜索示例代码并复制粘贴加载的依赖描述符。例如,如果您想开始使用 Spring 和 JPA 进行数据库访问,只需在项目中包含 spring-boot-starter-data-jpa 依赖项即可。

参考,Spring Boot Starter POM

编辑:

这些 POM 可用于合成可用于某种项目的依赖项,例如对于一个简单的 Spring MVC 项目,将包含以下工件(从 spring-boot-starterspring-boot-starter-webspring- boot-starter-security 分别):

Spring Boot 工件: org.springframework.boot:spring-boot org.springframework.boot:spring-boot-autoconfigure org.springframework.boot:spring-boot-starter-logging Spring Core、Web、MVC、安全工件: org.springframework:spring-core org.springframework:spring-web org.springframework:spring-webmvc org.springframework:spring-beans org.springframework:spring-context org.springframework:spring-expression org.springframework:spring-aop org.springframework.security:spring-security-config org.springframework.security:spring-security-web org.hibernate:hibernate-validator com.fasterxml.jackson.core:jackson-databind

可以在maven central repository 中无缝导航搜索结果中找到工件。

请注意,这可能不是一个完整的参考列表,因为某些组件可能会丢失,因此工件可能会被更新。

【讨论】:

我正在做的项目没有任何依赖管理。结果,我必须手动添加罐子。你能告诉我要为这些入门 POM 添加哪些 jar 吗? 您应该必须使用依赖管理工具(我已经推荐了 maven),否则您将失去 Starter POM 带来的所有收益,并且这些对您来说看起来不会比文本描述符更多。为了知道要挂钩哪些依赖项,您应该首先询问您正在处理什么样的应用程序,这将使主线程更加清晰。 我已经编辑了这个问题,以便更清楚地了解我的应用程序。我只需要我提到的 jar 引用的 Spring Boot jar 的名称。 就您的应用程序而言,starter jar 本身实际上是空的。有些确实包含一个META-INF/spring.provides 文件,IDE 可以使用该文件来提供 POM 更新的上下文帮助。选择“空”jar 而不是 POM 包装的主要原因是它们更易于使用(您无需记住添加 <type>pom</type>)。我同意其他评论者的观点,请使用支持依赖管理的构建系统,否则您将无法从初学者中获得任何好处。【参考方案2】:

简单地说,它们是依赖描述符,列出了传递依赖关系以及经过测试可以协同工作的版本,从而节省您尝试将处理应用程序某些方面的库放在一起的时间。

【讨论】:

【参考方案3】:

也可以让maven上报spring boot项目pom.xml文件中定义的各种spring-boot-starter-*所需要的依赖,使用如下命令

mvn dependency:resolve

例如使用 spring 1.5.8.RELEASE,使用以下 jars(和版本)

注释格式为 Group Id:Artifact Id:Version:Scope

The following files have been resolved:
    com.fasterxml.jackson.core:jackson-annotations:jar:2.8.0:compile
    org.jboss.logging:jboss-logging:jar:3.3.1.Final:compile
    aopalliance:aopalliance:jar:1.0:compile
    org.hamcrest:hamcrest-library:jar:1.3:test
    org.mockito:mockito-core:jar:1.10.19:test
    org.assertj:assertj-core:jar:2.6.0:test
    org.springframework:spring-beans:jar:4.3.12.RELEASE:compile
    org.springframework.boot:spring-boot-test:jar:1.5.8.RELEASE:test
    org.springframework.boot:spring-boot-autoconfigure:jar:1.5.8.RELEASE:compile
    org.springframework.boot:spring-boot-starter-tomcat:jar:1.5.8.RELEASE:compile
    org.skyscreamer:jsonassert:jar:1.4.0:test
    org.yaml:snakeyaml:jar:1.17:runtime
    com.fasterxml:classmate:jar:1.3.4:compile
    org.slf4j:jcl-over-slf4j:jar:1.7.25:compile
    org.springframework.boot:spring-boot-starter-test:jar:1.5.8.RELEASE:test
    org.hamcrest:hamcrest-core:jar:1.3:test
    com.jayway.jsonpath:json-path:jar:2.2.0:test
    org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.23:compile
    org.springframework.boot:spring-boot:jar:1.5.8.RELEASE:compile
    org.apache.tomcat:tomcat-annotations-api:jar:8.5.23:compile
    org.springframework:spring-context:jar:4.3.12.RELEASE:compile
    org.hibernate:hibernate-validator:jar:5.3.5.Final:compile
    javax.validation:validation-api:jar:1.1.0.Final:compile
    org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.23:compile
    org.springframework.boot:spring-boot-starter-logging:jar:1.5.8.RELEASE:compile
    com.fasterxml.jackson.core:jackson-core:jar:2.8.10:compile
    org.ow2.asm:asm:jar:5.0.3:test
    org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.23:compile
    org.slf4j:log4j-over-slf4j:jar:1.7.25:compile
    org.springframework:spring-web:jar:4.3.12.RELEASE:compile
    ch.qos.logback:logback-core:jar:1.1.11:compile
    org.springframework.security:spring-security-core:jar:4.2.3.RELEASE:compile
    org.springframework:spring-test:jar:4.3.12.RELEASE:test
    org.springframework.boot:spring-boot-starter:jar:1.5.8.RELEASE:compile
    org.springframework.security:spring-security-test:jar:4.2.3.RELEASE:test
    org.springframework.boot:spring-boot-starter-web:jar:1.5.8.RELEASE:compile
    org.springframework:spring-core:jar:4.3.12.RELEASE:compile
    org.springframework.boot:spring-boot-starter-security:jar:1.5.8.RELEASE:compile
    org.springframework.boot:spring-boot-actuator:jar:1.5.8.RELEASE:compile
    org.objenesis:objenesis:jar:2.1:test
    org.springframework:spring-expression:jar:4.3.12.RELEASE:compile
    org.springframework.boot:spring-boot-starter-actuator:jar:1.5.8.RELEASE:compile
    org.springframework.security:spring-security-config:jar:4.2.3.RELEASE:compile
    org.springframework.security:spring-security-web:jar:4.2.3.RELEASE:compile
    org.springframework:spring-aop:jar:4.3.12.RELEASE:compile
    junit:junit:jar:4.12:test
    org.slf4j:slf4j-api:jar:1.7.25:compile
    net.minidev:json-smart:jar:2.2.1:test
    org.springframework.boot:spring-boot-test-autoconfigure:jar:1.5.8.RELEASE:test
    net.minidev:accessors-smart:jar:1.1:test
    org.springframework:spring-webmvc:jar:4.3.12.RELEASE:compile
    ch.qos.logback:logback-classic:jar:1.1.11:compile
    org.slf4j:jul-to-slf4j:jar:1.7.25:compile
    com.fasterxml.jackson.core:jackson-databind:jar:2.8.10:compile

只需忽略具有部署测试范围的 jar。

如果您手边没有 Spring Boot 项目,只需在 Spring Initializr 创建一个,使用您需要的任何 Spring Boot 启动器。它还使用了maven wrapper,它封装了 maven 命令,节省了您单独设置和安装 maven 的时间。

所以只需从 Spring Initializr 下载 zip 文件,解压并在解压后的文件夹中打开命令提示符,然后改用以下命令

适用于 Linux/Mac 操作系统

 ./mvnw dependency:resolve

对于窗户

 ./mvnw.cmd dependency:resolve

【讨论】:

以上是关于什么是`spring-boot-starter` jars?的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot的spring-boot-starter有哪些(官方)

spring-boot-starter家族成员简介

spring-boot-starter家族成员简介

只需4步,自己搞个 Spring Boot Starter !

无法解析外部依赖 org.springframework.boot:spring-boot-starter: 因为没有定义存储库

由于缺少 WebApp 库,在 Spring-boot-starter 项目中构建失败