代码之家  ›  专栏  ›  技术社区  ›  CuriousMind

spring boot starter父项:这可以作为依赖项包含吗

  •  0
  • CuriousMind  · 技术社区  · 6 年前

    我在spring boot中理解了一些东西,并使用了一个非常简单的片段,比如在pom中添加了这个。xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
    </parent>
    

    据我所知 <parent> 在这种情况下,这意味着在我的pom中。xml,我们有一个父pom。xml(查看pom.xml文件了解更多信息) spring-boot-starter-parent )其中将包含依赖项列表。

    重要的是,它只是pom包装,而不是真正的jar/二进制(如果我错了,请更正)

    我在mvn存储库中看到了以下内容:

    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <type>pom</type>
    </dependency>
    
    

    我的疑问是:

    我们怎么能把它作为一个依赖项,它只是一个pom包(而不是一个真正的jar/war),它充当了保存公共依赖项的中心位置?允许吗?我尝试在我的项目中添加,但在STS IDE中发现了错误。

    这是如何下载的?我们能看看这个“家长”的内容吗

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mark Bramnik    6 年前

    首先,在本例中,您可能没有理解父pom的含义。

    任何特定版本(本例中为2.2.1)的Spring boot都可能与许多技术/库进行集成。因此,它提供了可使用的库的“默认”版本,因为很难检查它是否与所有库的所有可能版本兼容。当然,您可以提供自己的版本,但之后您应该作为应用程序维护人员测试兼容性。

    所以如果你能结帐 source code 对于spring boot starter父pom,您将看到它提供了一些插件和插件管理,更重要的是继承了另一个名为 spring-boot-dependencies

    笔记 它不会给项目添加任何依赖项 .它只定义了 dependencyManagement 部分这意味着,一旦在项目中使用(从这个pom继承的)依赖项,就不必指定版本,只需指定组id和工件id。 同样,这是因为spring boot默认提供了非常特定的第三方版本——经验证与之兼容的版本。。。

    至于问题的第二部分——实际上,像你发布的那样在打包pom中包含依赖性是没有意义的,你能提供一个链接吗?你到底在哪里看到过这个?

    有时候,当人们在项目中采用spring boot时,他们已经有了一些父项,所以他们不能使用继承,在这种情况下,他们可以使用一个非常特殊的maven范围“导入”,并使用对pom的依赖,将其视为BOM(BOM),坦白地说,这在maven中是一个非常高级的东西。但是spring boot在这些情况下使用了这个功能。

    依赖项包含如下所示:

    <dependencies>
             ...
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    

    注意,`导入行。从maven的站点:这意味着允许从远程POM文件中检索版本和排除项等依赖项管理信息。

    Here 这是一个关于这个主题的教程

        2
  •  1
  •   Patrick Fopa    6 年前

    @好奇的头脑,包括 spring-boot-starter-parent 作为一个依赖项,就像试图在Java中实例化一个接口或抽象类。正如您所注意到的,它的包装是pom,这意味着它只是一个maven工件,用于帮助配置maven项目。Jar和War将包含一些java二进制文件。我认为MVN存储库代码会自动生成所有样本作为依赖项。。