欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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,可以参考:

  1. 刚开始引入的系统路径是${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.解决上面的问题的方法就是将project.basedir{project.basedir}改为{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>
  1. maven打包方式
    springboot项目打包成jar或war包的方式(引用了本地jar包的)

三、打包成war包

  1. 在入口类同级的包下创建一个类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);
    }
}
  1. 将打包修改为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包,部署即可用