多模块Spring Boot应用程序

时间:2015-10-16 22:44:18

标签: maven spring-boot web-deployment

我们有一个Spring Boot应用程序(暴露REST服务)有多个模块,为了开发目的,我们使用默认的Spring Boot构建方法 - Maven将其构建为一个可嵌入Tomcat的可执行war文件。

出于生产部署目的,这不起作用。我们已经安装了Web应用服务器,我们需要定期的,不可执行的战争,可以在这些服务器上部署。我已经想通了,我该如何构建它。

我们还将在相同的高效服务器上部署另一个相关的网络应用程序(战争文件)(例如 - 应用程序的模拟器)。当然,他们会使用(某些)相同的模块,所以它提出的问题是如何设置maven来构建战争和模块罐外面,所以其他应用程序(部署在同一台服务器上的war文件)可以对它们有依赖性。我无法找到一个很好的解释/示例如何做到这一点。

任何想法,链接,博客?

1 个答案:

答案 0 :(得分:0)

这真的是一个Maven问题,而不是Spring Boot。当你有一个多模块项目时,Maven仍会为每个模块创建单独的工件,因此你仍然可以将它们作为依赖项引用到其他地方。

例如在我使用Spring启动的设置中,我有父项目及其下的模块。大多数模块都是jar工件,有些模块依赖于项目中的其他模块,当然还有一些外部依赖项。通过使用父级,我们可以使用父级中的占位符来标准化依赖项中使用的某些版本。由于工件仍然是单独构建和发布的,因此您可以在其他项目中引用它们,这是我相信您要问的。

例如(只是主要标签而不是所有标签):

父:

<groupId>com.somecompany</groupId>
<artifactId>project-parent</artifactId>
<packaging>pom</packaging>
<version>1.1.2-SNAPSHOT</version>
<modules>
    <module>module1</module>
    <module>module2</module>
</modules>

模块1:

<parent>
    <groupId>com.somecompany</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.1.2-SNAPSHOT</version>
</parent>

<groupId>com.somecompany.tools</groupId>
<artifactId>project-tools-core</artifactId>
<version>1.1.2-SNAPSHOT</version>
<packaging>jar</packaging>

单词数:

<parent>
    <groupId>com.somecompany</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.1.2-SNAPSHOT</version>
</parent>

<groupId>com.somecompany.apps</groupId>
<artifactId>project-webapp</artifactId>
<version>1.1.2-SNAPSHOT</version>
<packaging>war</packaging>
<!-- dependency on other module -->
<dependency>
    <groupId>com.somecompany.tools</groupId>
    <artifactId>project-tools-core</artifactId>
    <version>${project.version}</version>
</dependency>

其他一些项目:

<groupId>com.somecompany.apps</groupId>
<artifactId>project-webapp-services</artifactId>
<version>1.3.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- dependency on other module which is published -->
<dependency>
    <groupId>com.somecompany.tools</groupId>
    <artifactId>project-tools-core</artifactId>
    <version>1.1.1</version>
</dependency>

因此,在这种情况下假设您已经发布了父级及其模块的1.1.1版本,您可以让另一个项目引用任何已发布的工件。也许这是你缺少的发布和发布步骤。