使SpringBoot 同时支持打包war和jar
1、修改pom.xml文件
(1)增加一行,配置打包格式
<packaging>${project.packaging}</packaging>
(2)增加profiles特性(在war包格式发布时,需要去除jetty的依赖包),如果项目中有其他包中含有jetty,也需要一并去除。
<profiles> <profile> <id>jar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <project.packaging>jar</project.packaging> </properties> </profile> <profile> <id>war</id> <properties> <project.packaging>war</project.packaging> </properties> <dependencies> <dependency> <artifactId>crux-baseapp</artifactId> <groupId>com.crux</groupId> <version>1.0-war-SNAPSHOT</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </profile> </profiles>
(3)引入servlet依赖
<!--引入servlet--> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
2. 增加ServletInitializer
在项目的Application启动类所在的package下增加如下文件,目的是初始化servlet以及jdbc驱动初始化。
在程序启动时,可能会遇到elasticsearch报错的问题,请联系相关开发同学处理。
@Slf4j public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { try { Class.forName("oracle.jdbc.OracleDriver"); } catch (ClassNotFoundException e) { log.warn("can not load oracle.jdbc.OracleDriver"); } return builder.sources(Application.class); } }
3. 项目构建
(1) 命令行方式
maven增加profile配置后,原有打jar包和docker镜像的方法不变,如果需要构建war包,使用如下命令:
mvn -U clean package -Pwar -Dmaven.test.skip=true
在构建前可以检查一下需要排除的jetty相关jar包是否排除干净
mvn dependency:tree
(2)IDEA 中直接构建
在maven条目的Profiles中勾选要打包的类型,直接点击package即可。
注意如果项目中有测试类,需要在pom文件夹中加入以下配置,排除test文件夹,或者直接使用命令行方式
<build> <plugins> <!--打包编译的时候排除test测试类--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build>