解决war包部署后找不到本地jar包的问题(ClassNotFoundException、NoClassDefFoundError)

大多数Web项目都会引用一些本地jar包,然后最终以war包的形式部署上线。但实际运行时jar包里面的类根本找不到,出现各种ClassNotFoundException、NoClassDefFoundError等错误。

这里记录一下注意事项和正确的解决方法:

1、先简单说下怎么配置war包部署(如果你原来是jar包部署的话):

<project ...>
	<packaging>war</packaging>
    ...
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        ...
    </dependencies>
</project>

如上,pom.xml文件中加入packaging标签,写war;然后加入tomcat的provided级别的依赖。然后在IDEA中Build Artifacts即可生成war包,默认在项目根目录的target文件夹中。

2、假设我们引入了一个本地jar包(json-simple-1.1.1.jar),我这边文件放在 resources/lib 目录下,你也可以自定义其他目录,然后继续配置pom文件,在 dependencies 标签下加子标签:

<!-- jar libs -->
<dependency>    
 	<groupId>lib1</groupId>    
 	<artifactId>lib1</artifactId>    
  	<scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/json-simple-1.1.1.jar</systemPath>
</dependency>

groupId和artifactId都可以瞎写,无所谓的,但scope和systemPath必须正确。

3、最关键的一步,因为要让本地依赖的jar包生效必须让它们置于 webapps/xxx/WEB-INF/lib 目录下才可以,所以继续配置pom文件:

<project ...>
	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${project.basedir}/src/main/resources/lib</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <includes>
                                <include>**/*.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

然后再打包就可以了。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页