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

时间:2016-04-05 05:18:32

标签: 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文件。我们大多数现有客户更喜欢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?如果要将所有资源放在resources文件夹下,spring boot将如何创建WAR文件。

2 个答案:

答案 0 :(得分:2)

使用Gradle构建WAR和FAT JAR非常简单。

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

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

我之前没有这样的要求,所以不知道可能会发生什么样的挑战。我肯定不会尝试将maven-assembly-plugin或其他打包插件与spring-boot-maven-plugin集成。

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

答案 1 :(得分:2)

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

澄清一点 - 我不建议在这里使用多模块配置,只需要多个名称为war-pom.xml和fat-jar-pom.xml的pom,以及parent-pom.xml。< / p>