使用Spring Boot的多模块项目

5

我正在使用 spring-boot 创建一个项目。

Spring Boot Maven 结构要求必须定义父项目为 spring-boot-starter-parent

我有这样的情况:想将我的应用程序打包成多模块结构,在其中定义包含与地理位置相关功能的模块。

类似于这样,每个模块都有一个 JAR 包装:

parent Pom
|
|-----------Core module
|
|-----------India Module
|
|----------Africa Module
|
|--------- Europe Module

现在,我可以使用maven配置文件对应不同的地理位置来打包我的应用程序。例如,在印度的配置文件中,只会包括核心模块和印度模块并进行打包。

那么,如果我的父级项目已经定义为spring-boot-starter-parent,我该如何在Spring Boot中实现相同的功能呢?


你不必将starter作为父级使用;那只是为了方便引入依赖管理。 - chrylis -cautiouslyoptimistic-
同意,请查看我的回答,关于可能的方法。请评论正确性。 - alok ailawadi
同意。请看我的答案。同时,请评论我的方法是否正确。 - alok ailawadi
3个回答

12

有两种方法可以做到这一点,

  1. 使用您的父 POM 中的 dependencyManagement,例如:

     <dependencyManagement>
        <dependencies>
           <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <type>pom</type>
            <version>1.2.3.RELEASE</version>
            <scope>import</scope>
        </dependency>
    </dependencies>
    
  2. 这是我正在做的方式。根POM(使用pom打包)以Spring Boot为父级

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

模块的pom文件将根pom文件作为父项。 核心模块POM添加了对其他模块的依赖。 它还使用"spring-boot-maven-plugin"创建了一个fat jar。

Spring上下文是通过java -jar Core_xxx.release.jar启动的。

当然,如果您有组织范围的父POM,那么第一选择将更适合。


1

0

我不太了解Spring Boot。

但是一般来说,使用Spring可以通过常规配置包来完成。因此,在您的主应用程序/配置中,您需要执行以下操作:

@Configuration
@ComponentScan("com.example.common.bootstrap")

然后,您只需为每个模块在引导程序包中放置特定于模块的配置。 因此,只需创建com.example.common.boostrap.AsiaModule和com.example.common.bootstrap.EuropeModule作为Spring配置,您就可以了。


你应该使用@Import,然后在模块配置类上定义ComponentScan。 - mh-dev
我将@SpringBootApplication放在我的应用程序启动类中,其包为x.y,应用程序中的所有包都是x.y.*,因此如果类在类路径中,则进行组件扫描。我的问题与此不同,在于我关心多模块Spring Boot应用程序中的Maven POM结构。 - alok ailawadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接