如何在本地使用Spring Boot开发同时生成可部署到WildFly的WAR包
实现Spring Boot本地开发与WildFly WAR部署兼容的配置方案
第一步:调整Maven打包配置
- 修改打包方式为war:
<packaging>war</packaging> - 排除Spring Boot内置的Tomcat依赖,设置为
provided作用域,该配置不会影响本地开发时的依赖加载,打包时会自动排除内置Tomcat避免和WildFly的Servlet容器冲突
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
- 保留Spring Boot Maven插件,保留可执行WAR特性
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin>
注意:项目中引入的Servlet、JSP等Java EE规范相关依赖,请统一设置
<scope>provided</scope>,避免和WildFly内置的规范实现包冲突。
第二步:修改启动类配置
启动类继承SpringBootServletInitializer并重写configure方法,适配外部Servlet容器的启动规则,同时保留原有main方法供本地开发使用
@SpringBootApplication public class YourApplication extends SpringBootServletInitializer { public static void main(String[] args) { // 本地开发直接运行该方法即可,和原有开发体验完全一致 SpringApplication.run(YourApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(YourApplication.class); } }
第三步:上下文路径适配
- 本地开发时直接在
application.properties中配置server.servlet.context-path自定义访问路径即可 - 部署到WildFly时如果需要指定上下文路径,在
src/main/webapp/WEB-INF目录下新增jboss-web.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd"> <context-root>自定义上下文路径</context-root> </jboss-web>
验证方式
- 本地开发:直接运行启动类main方法,或执行
mvn spring-boot:run命令即可正常启动 - 打包部署:执行
mvn clean package命令,生成的WAR包既可以通过java -jar 包名.war本地运行,也可以直接上传到WildFly部署目录完成部署
内容的提问来源于stack exchange,提问作者Francesco Clementi
相关产品推荐
相关产品推荐

