Custom spring boot starter for specifying distribution management

时间:2016-08-31 12:35:35

标签: spring-boot

We have a spring boot application which has its parent defined as spring-boot-starter-parent. But in our project, we have a parent pom with distribution management defined in it, and all the submodules in the project inherit from it. Now, since the spring boot application already inherits from spring-boot-starter-parent, and I do not want to duplicate the distribution management, I thought of having a custom spring boot starter module just to be able to define the distribution management in there and then include this custom spring boot starter as a dependency in the spring boot application. But when I do a mvn clean install deploy of the spring boot application it fails with the error shown below:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.
2:deploy (default-deploy) on project crs-acc-eve-gridgain-load-app: Deployment f
ailed: repository element was not specified in the POM inside distributionManage
ment element or in -DaltDeploymentRepository=id::layout::url parameter -> [Help
1]

Is it the right way to achieve this? or there any other recommended ways of doing it?

Given below are the poms of custom spring boot starter parent module:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>crs-micro-services</artifactId>
        <groupId>com.ing.crs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>crs-spring-boot-starter-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot.version>1.3.5.RELEASE</spring-boot.version>
    </properties>
    <modules>
        <module>crs-spring-boot-starter</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <distributionManagement>
        <repository>
            <id>XXXX</id>
            <name>XXXX</name>
            <url>XXXX</url>
        </repository>
        <snapshotRepository>
            <id>XXXX</id>
            <name>XXXX</name>
            <url>XXXX</url>
            <uniqueVersion>false</uniqueVersion>
        </snapshotRepository>
    </distributionManagement>

</project>

And this..for the starter module

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>crs-spring-boot-starter-parent</artifactId>
        <groupId>com.ing.crs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <version>1.0-SNAPSHOT</version>
    <artifactId>crs-spring-boot-starter</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

</project>

And the sprng boot application has this dependency

    <dependency>
        <groupId>com.ing.crs</groupId>
        <artifactId>crs-spring-boot-starter</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>import</scope>
    </dependency>

Thanks and regards, Priya

1 个答案:

答案 0 :(得分:2)

不要求您的构建应使用spring-boot-starter-parent进行配置。如果您已经拥有某个分发管理的父级,请随时保留它。你需要调整一下父母。以下是几个选项:

  • 如果整个项目都是基于spring boot的,那么你的父级可能会继承Spring Boot的父级吗?如果您拥有在整个组织内使用的父级,这可能无效。
  • 您可以保持父级不变,然后使用spring-boot-dependencies BOM。见the documentation for more details。您必须复制您使用的父级的位(例如插件定义),但这并不是很多工作。

你的建议永远不会奏效。 BOM仅导入<dependencyManagement>。你正在寻找的是mixin,Maven尚不支持它。