多模块 Spring 启动应用程序
Multiple module Spring Boot app
我们有一个 Spring 具有多个模块的引导应用程序(公开 REST 服务),出于开发目的,我们使用默认的 Spring 引导构建方法 - Maven 将其构建为一个可执行文件 war 文件,其中嵌入了 Tomcat。
出于生产部署目的,这不起作用。我们已经设置了 Web 应用程序服务器,我们需要一个可以部署在这些服务器上的常规的、不可执行的 war。我已经想出了如何构建它。
我们还将在相同的生产服务器(例如 - 应用程序模拟器)上部署另一个相关的网络应用程序(war 文件)。当然,他们会使用(一些)相同的模块,所以它提出的问题是如何设置 maven 来构建 war 和它之外的模块 jar,所以其他应用程序(war部署在同一台服务器上的文件)可能对它们有依赖性。我找不到好的 explanation/example 如何做到这一点。
有什么想法、链接、博客吗?
这实际上比 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>
模块 2:
<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 版,您可以让另一个项目引用任何这些已发布的工件。可能是你缺少的发布和发布步骤。
我们有一个 Spring 具有多个模块的引导应用程序(公开 REST 服务),出于开发目的,我们使用默认的 Spring 引导构建方法 - Maven 将其构建为一个可执行文件 war 文件,其中嵌入了 Tomcat。
出于生产部署目的,这不起作用。我们已经设置了 Web 应用程序服务器,我们需要一个可以部署在这些服务器上的常规的、不可执行的 war。我已经想出了如何构建它。
我们还将在相同的生产服务器(例如 - 应用程序模拟器)上部署另一个相关的网络应用程序(war 文件)。当然,他们会使用(一些)相同的模块,所以它提出的问题是如何设置 maven 来构建 war 和它之外的模块 jar,所以其他应用程序(war部署在同一台服务器上的文件)可能对它们有依赖性。我找不到好的 explanation/example 如何做到这一点。
有什么想法、链接、博客吗?
这实际上比 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>
模块 2:
<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 版,您可以让另一个项目引用任何这些已发布的工件。可能是你缺少的发布和发布步骤。