spring boot多模块包

时间:2017-01-03 14:30:18

标签: spring maven spring-boot package

我正在尝试使用Maven将Spring Boot打包为多个模块,这里是我的主模块pom.xml:

<modules>
    <module>my-data-services</module>
    <module>my-message-services</module>
    <module>my-common</module>
</modules>
<groupId>com.my</groupId>
<artifactId>my-multi-services</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

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


<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>
<dependencyManagement>....</dependencyManagement>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

my-common pom.xml:

<parent>
    <artifactId>my-multi-services</artifactId>
    <groupId>com.my</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-common</artifactId>
<packaging>jar</packaging>
<dependencies>....</dependencies>

和my-data-services pom.xml:

<parent>
    <artifactId>my-multi-services</artifactId>
    <groupId>com.my</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>my-data-services</artifactId>

<dependencies>

    <dependency>
        <groupId>com.my</groupId>
        <artifactId>my-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

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

my-common模块只是一个常见的utils lib而不是一个可运行的模块,但当我尝试mvn clean package时,异常抛出如下:

Execution default of goal org.springframework.boot:spring-boot-maven-p
lugin:1.4.2.RELEASE:repackage failed: Unable to find main class 
然后我添加一个主类,这个模块可以打包,但它不是一个lib jar,它就像一个runnable spring boot jar

 -BOOT-INF
 |
 -META-INF
 |
 -org

并抛出异常

Failed to execute goal org.apache.maven.plugins:maven-compiler- plugin:3.1:compile (default-compile) on project my-data-services: Compilation failure: Compilation failure: package com.my.common.utils does not exist;

com.my.common.utils位于模块my-common

我如何解决这个问题,并在spring boot multi modules项目中,如何打包一个没有BOOT-INF的常见utils库

1 个答案:

答案 0 :(得分:5)

这是因为你的模块会添加'spring-boot-maven-plugin',因为它是在父模块中定义的。

您需要做的是将所有内容移动到子模块,甚至是应用程序入门类。我通常如何做到这一点:

  • 我的父模块
    • 我的服务模块
    • 我的共用模块
    • my-web-module(或非web应用程序中的my-runtime-module)

my-parent-module将有'spring-boot-starter-parent'作为它的父级,但它不会有一个src文件夹,因为所有内容都被移动到子模块中。

my-web-module将取决于其他模块,并将具有'spring-boot-maven-plugin'。您可以在my-web-module文件夹中使用'mvn spring-boot:run'运行该应用程序。