springboot项目打包成jar或war包的方式(引用了本地jar包的)
程序员文章站
2024-02-03 17:03:22
...
前言
由于公司有一些剩余的老资产,年代比较久远,然后一些新人过来的时候,他们学的技术和之前的比较有较大的的更新,想看懂很难,然后公司给了我一个月的时间用springboot重构一下之前的版本,在这个重构期间发现里面有很多公司自带的jar包,但是没有维护自己的maven服务器,所以必须在项目中引入本地jar包,在打包的时候碰到不少问题,当项目完成的时候需要打成war包,方便公司的部署,转换的时候又碰到了一些问题。所幸按时完成任务。具体请看下面:
一、引入本地jar包
先在项目下创建一个lib文件夹,将要导入的本地jar包放入其中,pom文件引入时groupId,version可以随便填,但是scope必须是system,systemPath是本地jar包的位置,这个必须是正确的,否则有可能出问题。我的位置是src/main/resources/static/lib,可以参考:
- 刚开始引入的系统路径是${project.basedir}/src/main/resources/static/lib/XmlSchema-1.1.jar
<dependency>
<groupId>com.infosec</groupId>
<artifactId>XmlSchema</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/static/lib/XmlSchema-1.1.jar</systemPath>
</dependency>
虽然在开发的时候可以访问到,但是打包成jar包时,就会出现ClassNotFoundException,原因是没有找到本地jar包
2.解决上面的问题的方法就是将{pom.basedir},问题就解决了,具体是什么原因不是很清楚
<dependency>
<groupId>com.infosec</groupId>
<artifactId>XmlSchema</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/static/lib/XmlSchema-1.1.jar</systemPath>
</dependency>
二、打包成jar包
1.修改打包方式为jar
<artifactId>itsramanage</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging>
2.修改打包插件的配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--将包含作用域为system的本地jar包包含到jar包-->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
<!--打包好后的jar包名称-->
<finalName>ROOT</finalName>
</build>
- maven打包方式
三、打包成war包
- 在入口类同级的包下创建一个类SpringBootWarInitializer,用于做tomcat的入口类
# jar包入口类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ItsramanageApplication {
public static void main(String[] args) {
SpringApplication.run(ItsramanageApplication.class, args);
}
}
# war包入口类
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class SpringWarInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
# 值得注意的是,这里的类是jar包入口类的类名
return application.sources(ItsramanageApplication.class);
}
}
- 将打包修改为war
<artifactId>itsramanage</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>Demo project for Spring Boot</description>
<packaging>war</packaging>
3.引入tomcat,避免内置tomcat对服务产生影响
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
4.修改插件,如果不修改会出现war包中找不到类的异常
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart 这个要手动加进去 -->
<!--<fork>true</fork>-->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>${pom.basedir}/src/main/resources/static/lib</directory>
<targetPath>WEB-INF/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
<finalName>ROOT</finalName>
</build>
5.按照jar包的操作方法即可生成一个war包,部署即可用