2

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

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

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

<packaging>jar</packaging>

或者

<packaging>war</packaging>

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

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

我期待一些指导来完成迁移。事实上,我们已经完成了这些更改并且工作正常,但是我们对这代 WAR / JAR 感到困惑。

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

4

2 回答 2

3

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

使用 Maven,我会尝试多模块设置,其中一个子模块将构建胖 JAR,第二个将构建 WAR 文件。

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

我之前没有这个要求,所以不知道会遇到什么挑战。当然,我不会尝试将maven-assembly-plugin其他打包插件与spring-boot-maven-plugin.

关于配置文件的位置,只需src/main/resources根据 Spring Boot 约定将它们放入或其子文件夹中。Spring Boot 是自以为是的框架,如果您不尝试抵制默认设置,它将对您最友好。

于 2016-04-05T08:45:45.227 回答
2

Maven 不能优雅地处理这个问题,但它远非难以解决。您可以使用 3 个 pom 文件来执行此操作。一个包含大部分配置的父 pom,一个用于工作的打包部分。这也将巧妙地将两种不同组装模式的关注点分开。

澄清一下——我在这里不推荐多模块配置,只推荐多个 pom,名称如 war-pom.xml 和 fat-jar-pom.xml,以及 parent-pom.xml。

于 2016-04-05T10:51:48.183 回答