2015-10-16 106 views
1

我们有一个Spring Boot应用程序(公开REST服务)和多个模块,为了开发目的,我们使用默认的Spring Boot构建方法 - Maven将它构建为一个可执行的war文件,进去。多模块Spring Boot应用程序

对于生产性部署而言,这是行不通的。我们已经安装了Web应用程序服务器,我们需要一个定期的,不可执行的战争,可以部署在这些服务器上。我已经想通了,我该如何构建它。

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

任何想法,链接,博客?

回答

0

这实际上比Spring Boot更像是一个Maven问题。当你有一个多模块项目时,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,您可以让其他项目引用任何已发布的工件。也许这是您错过的发布和发布步骤。

相关问题