使用 Maven 打包 JAR 和 WAR 的 Spring Boot 迁移问题

标签 spring maven spring-mvc spring-boot spring-boot-maven-plugin

我们正在尝试将现有的 Spring MVC 应用程序迁移到 Spring Boot 应用程序。我们现有的应用程序使用的是 3.2.9,因此有大量的 XML 配置。所有 bean 都在 XML 文件中定义。我们所做的首先是将现有应用程序升级到 Spring 4.2.5 版本,因为 Spring Boot 仅适用于 Spring 4 版本。

我们的要求是在构建过程中同时拥有 FAT JAR 和 WAR 文件。我们的大多数现有客户都更喜欢应用程序服务器部署,因此我们必须为他们创建 WAR 文件。此外,对于我们的内部测试和新部署,我们计划使用 FAT JAR。

我们如何在Maven文件中实现它们,我们可以单独提供如下。是否有任何 Maven 插件可以在单个构建中生成两者?

<packaging>jar</packaging>

<packaging>war</packaging>

我们正在将我们的 Artifact 发布到 Nexus 存储库中。因此,我们希望为 JAR 文件和 WAR 文件提供单独的存储库位置。我们可以使用单个 pom.xml 文件来做到这一点吗?

还有一个问题,我们在WEB-INF文件夹下有所有的XML配置。当我们移动到 Spring Boot 应用程序时,它必须位于 resources 文件夹下。我们怎样才能轻松处理它们。当我们构建 FAT jar 时,不会在 WEB-INF 下查找资源,因为它只是忽略 webapp 项目。

我期待获得一些指导来完成迁移。事实上,我们已经完成了这些更改并且运行良好,但我们对 WAR/JAR 代感到困惑。

更新: 我还有另一个问题,如果我们将现有的应用程序转换为 Spring Boot,我们是否仍然需要在 Web 应用程序中维护 WEB-INF 文件夹,或者可以将所有内容移动到资源文件夹中?在构建WAR文件时,spring boot是否负责将资源移动到WEB-INF?如果您将所有资源放在 resources 文件夹下,Spring Boot 将如何设法创建 WAR 文件。

最佳答案

使用 Gradle 构建 WAR 和 FAT JAR 非常容易。

使用 Maven,我会尝试 multi module setup ,其中一个子模块将构建 fat JAR,第二个子模块将构建 WAR 文件。

应用程序逻辑可以作为第三个子模块,因此是具有 Spring 配置和 bean 的独立 JAR。该应用程序逻辑 JAR 将作为 fat JAR 和 WAR 模块的依赖项。 WAR具体配置可以放在Maven WAR子模块中。

我之前没有这样的需求,所以不知道会出现什么挑战。当然,我不会尝试将 maven-assemble-plugin 或其他打包插件与 spring-boot-maven-plugin 集成。

关于配置文件的位置,只需根据 Spring Boot 约定将它们放入 src/main/resources 或其子文件夹中即可。 Spring Boot 是一个固执己见的框架,如果您不尝试抵制默认值,它将对您最友好。

关于使用 Maven 打包 JAR 和 WAR 的 Spring Boot 迁移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36417679/

相关文章:

java - 使用 spring 注解创建不同的上下文

java - Spring Data MongoDb 是否支持 $filter 数组聚合运算符?

java - Spring MVC - 表单映射

java - 使用 Spring MVC 提供静态内容并渲染 JSP

spring - 我应该将我的 Vaadin 10+ 静态文件放在哪里?

java - 通过自定义转换器转换 DynamoDB 的自定义类型时,Jackson Json ObjectMapper 无法映射嵌套的 ZonedDateTime 实例

java - Java 后台作业管理器?

java - 如何从 IntelliJ 获取运行本地服务器的 Maven 项目

java - Maven Junit 测试 "noClassDefFoundError"

java - 如何理解和使用spring fusion与eclipse IDE?