有没有办法在不更改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。
这可能吗?
答案 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构建。