前言

由于公司有一些剩余的老资产,年代比较久远,然后一些新人过来的时候,他们学的技术和之前的比较有较大的的更新,想看懂很难,然后公司给了我一个月的时间用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.解决上面的问题的方法就是将spring boot 打包 包导入的jar包对应的程序包不存在 springboot本地jar包打包_springboot{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打包方式

三、打包成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包,部署即可用