一个Spring Boot项目,部署到JAR或WAR

时间:2014-05-26 10:59:09

标签: spring maven spring-boot

有没有办法在不更改pom.xml或应用程序源的情况下将单个Spring 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。

这可能吗?

3 个答案:

答案 0 :(得分:30)

我设法通过添加

来实现
<packaging>${packaging.type}</packaging>

到POM文件,然后为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创建单独的模块,但我没有走这条路。

答案 1 :(得分:12)

WAR文件的可执行文件有什么问题?那不是你真正需要的吗?

P.S。像
java -jar name.war

答案 2 :(得分:5)

我们最近有类似的要求,其中最初打包为可执行Jar的现有基于Spring Boot的项目需要支持Tomcat和WildFly部署。

由于此项目中使用了某些依赖项(例如WebJars),因此只需切换到WAR包,因为WildFly(VFS支持)需要其中一些依赖项,而其他部署则不需要。 / p>

解决方案是以 core 模块包含实际项目但未应用Spring Boot插件的方式重组项目模块,而几个模块依赖于 core 模块并配置部署工件细节(引导和其他插件,特定于部署的依赖项等)。

这样,项目构建能够在单个构建运行中生成多个部署工件(Boot的可执行JAR,传统WAR和WildFly特定WAR)。

如果有人发现这个有用,那么演示该方法的示例项目是available on Github。该项目可以由Gradle或Maven构建。