配置SpringBoot方便的切换jar和war

38次阅读

共计 2276 个字符,预计需要花费 6 分钟才能阅读完成。

配置 SpringBoot 方便的切换 jar 和 war
网上关于如何切换,其实说的很明确,本文主要通过 profile 进行快速切换已实现在不同场合下,用不同的打包方式。
jar 到 war 修改步骤

pom 文件修改

packaging 配置由 jar 改为 war
排除 tomcat 等容器的依赖
配置 web.xml 或者无 web.xml 打包处理

入口类修改
添加 ServletInitializer

特别注意:当改成 war 包的时候,application.properties 配置的 server.port 和 server.servlet.context-path 就无效了,遵从 war 容器的安排。
配置 pom
配置 packaging
<packaging>${pom.package}</packaging>
修改 build
<!– 作用是打 war 包的时候,不带版本号 –>
<finalName>${pom.packageName}</finalName>

<!– 加入 plugin–>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<!– 如果想在没有 web.xml 文件的情况下构建 WAR,请设置为 false。–>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
排除容器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
配置 profile
<profiles>
<profile>
<!– 开发环境 –>
<id>jar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<pom.package>jar</pom.package>
<pom.packageName>${project.artifactId}-${project.version}</pom.packageName>
<pom.profiles.active>dev</pom.profiles.active>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
</dependencies>
</profile>
<profile>
<id>war</id>
<properties>
<pom.package>war</pom.package>
<pom.packageName>${project.artifactId}</pom.packageName>
<pom.profiles.active>linux</pom.profiles.active>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
</profiles>
修改入口类

入口类继承 SpringBootServletInitializer

重写 configure 方法

使用 @Profile 注解,当启用 war 配置的时候,初始化 Servlet。
public class Application extends SpringBootServletInitializer {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

@Profile(value = {“war”})
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}

正文完
 0