带有 org.springframework.cloud 和 spring-boot-starter-parent 的自定义父 pom

Posted

技术标签:

【中文标题】带有 org.springframework.cloud 和 spring-boot-starter-parent 的自定义父 pom【英文标题】:custom parent pom with org.springframework.cloud and spring-boot-starter-parent 【发布时间】:2018-07-18 01:59:39 【问题描述】:

我有几个 Spring Cloud 项目,并希望将所有常见的依赖项也放入我自己的父 pom 中。许多示例展示了如何使用<dependencyManagement> 进行操作。但在我使用 spring-boot-starter-parent 和 org.springframework.cloud 的情况下,它似乎无法使用依赖管理,因为父级已经成为“spring-boot-starter-parent”并且依赖管理也有 org.springframework.cloud。以下是我的 Spring Cloud 项目的 pom 文件之一。

<groupId>com.demo</groupId>
<artifactId>demo-customer-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>demo-customer-service</name>
<description>Demo project for Spring Boot</description>

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

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencyManagement>
    <dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

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

如上,有两个parent:org.springframework.boot starter parent和cloud。那么我怎样才能拥有自己的父母呢?

有什么建议请教父和子 pom 文件应该是怎样的?

【问题讨论】:

“那我怎么能有自己的父母呢?”是什么意思 @miroh 。我的意思是,一个父 pom 文件,其中包括 org.springframework.cloud 、 org.springframework.boot 依赖项以及其他项目特定的依赖项,例如 apache commons、数据库依赖项。因为这些依赖项对所有子项目都是通用的。结果,我将能够删除上面 pom 中定义的版本。 您在问题中提供的 pom 可以是父母。如果您删除依赖项部分(如果您不删除它,它仍然可能是父项)。 @miroh。感谢关注。那么2个问题:1.我的父母也有自己的父母吗?我只是要求更清楚一点:这是一个好习惯吗? 2. 为什么要删除依赖?因为这些依赖项对于许多子项目都是通用的。 【参考方案1】:

您提供的 pom 完全可以成为父 pom。父母 poms 也可以有父母自己。它是常用的,如果你检查你在 github 上使用的项目,它们有父链。 例如 spring-cloud-build-dependenciesspring-boot-dependencies 作为父级。 spring-boot-dependenciesspring-boot-build 作为父级。

在你的父 pom 中,&lt;dependencies&gt;&lt;/dependencies&gt; 中定义的依赖项将被添加到你父级的所有子级中。如果您的所有孩子都在使用这些依赖项,您可以将它们添加到此标签中。 (我这里一般会添加单元测试依赖,但你可以添加任何东西) 父 pom 通常位于 childs pom.xml 上方的一个文件夹。 (但&lt;relativePath&gt;如果在别处也可以用)

|-父 pom.xml |-子项目文件夹 |--child pom.xml

【讨论】:

非常感谢 miroh 的回答和解释。

以上是关于带有 org.springframework.cloud 和 spring-boot-starter-parent 的自定义父 pom的主要内容,如果未能解决你的问题,请参考以下文章

第二代网关GateWay搭建流程

Feign客户端实现RPC 调用

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

使用带有 uuencode 的“sendmail”发送邮件,并带有主题

带有和不带有聚合的 sql 查询

如何翻转正面带有标签而背面带有另一个标签的视图 - 参见图片