为啥我的 Spring Boot 启动器没有将其依赖项带到项目中?

Posted

技术标签:

【中文标题】为啥我的 Spring Boot 启动器没有将其依赖项带到项目中?【英文标题】:Why doesn't my Spring Boot starter bring its dependencies to the project?为什么我的 Spring Boot 启动器没有将其依赖项带到项目中? 【发布时间】:2021-08-26 03:57:11 【问题描述】:

我创建了一个简单的启动器——TimeStarter,里面有 RestController。这是它的pom:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.0</version>
    <relativePath/>
</parent>

<groupId>ez</groupId>
<artifactId>time-starter-spring-boot-starter</artifactId>
<version>0.0.1</version>
<name>time-starter</name>

<properties>
    <java.version>11</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

我已将 TimeStarter 添加到我的项目中:

<dependencies>
    <dependency>
        <groupId>ez</groupId>
        <artifactId>time-starter-spring-boot-starter</artifactId>
        <version>0.0.1</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

之后,我希望所有必要的依赖项(spring-boot-starter-web)都将出现在我的项目中,并且 starter 中的 REST 控制器将为 HTTP 请求做好准备。但是不行,我必须添加 spring-boot-starter-web 和 spring-web 依赖项才能使我的启动器工作。

【问题讨论】:

因为你是 optional 并且你的启动器被添加为 provided 所以不会因为这些东西而包含任何内容。 听起来像是@M.Deinum 的答案 【参考方案1】:

正如 M.Deinum 所说,原因是我将启动器中的依赖项设置为“可选”。

【讨论】:

以上是关于为啥我的 Spring Boot 启动器没有将其依赖项带到项目中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在启动 Spring Boot 应用程序时出现 Gson builder 错误?

为啥我的表单没有在 Spring Boot 中传递信息

为啥我的 Spring Boot 应用程序会自行关闭

为啥在将 Spring Data JPA 与 Spring Boot 结合使用时,我的数据库自定义没有得到应用?

为啥我的idea中没有sping boot 1.5.7的版本

如何调试,为啥 Spring Boot 集成测试上下文没有在测试之间重用?