spring 一个Sping Boot 项目,同时部署到JAR或WAR

quhf5bfb  于 2022-12-10  发布在  Spring
关注(0)|答案(3)|浏览(167)

是否有一种方法可以在不更改pom.xml或应用程序源代码的情况下,将单个 Boot 项目打包到JAR和WAR中?
我读过Converting a Spring Boot JAR Application to a WAR,但是它将项目转换为WAR,并且失去了打包为JAR的能力。
我并不期望mvn package同时做这两件事。我想要的是类似mvn i-want-a-jar的东西,它会把项目打包成JAR。或者我可以运行mvn i-want-a-war,它会把项目打包成WAR。
这可能吗?

1l5u6lss

1l5u6lss1#

我通过添加

<packaging>${packaging.type}</packaging>

然后为JAR和WAR设置不同的配置文件:

<profiles>
    <profile>
      <id>jar</id>
      <properties>
        <packaging.type>jar</packaging.type>
      </properties>
    </profile>
    <profile>
      <id>war</id>
      <properties>
        <packaging.type>war</packaging.type>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

现在mvn package -P war生成一个WAR,mvn package -P jar生成一个JAR。
另一个选择是为JAR和WAR创建单独的模块,但我没有走这条路。

ljsrvy3e

ljsrvy3e2#

一个可执行的WAR文件有什么问题?这难道不是您真正需要的吗?
附言:
java -jar name.war

23c0lvtd

23c0lvtd3#

我们最近有一个类似的需求,其中一个基于Sping Boot 的现有项目最初被打包为一个可执行Jar,需要支持Tomcat和WildFly部署。
由于此项目中使用了一些依赖项(例如WebJars),因此不能简单地切换到WAR包,因为其中一些依赖项是WildFly(VFS支持)所需的,而不是其他部署所需的。
解决方案是重新构建项目模块,使 core 模块包含实际项目,但不应用Sping Boot 的插件,同时几个 package 模块将依赖于 core 模块并配置部署工件细节(Boot和其他插件、部署特定依赖项等)。
通过这种方式,项目构建能够在一次构建运行中生成多个部署工件( Boot 的可执行JAR、传统WAR和WildFly特定的WAR)。
如果有人觉得这很有用,那么演示该方法的示例项目是available on Github。该项目可以由Gradle或Maven构建。

相关问题