解决Spring-boot 引入系统包导致的java.lang.NoClassDefFoundError

最近在做一个含支付宝支付的项目,架构用的是Spring-boot;支付宝官网提供一个支付SDK jar下载使用,把jar直接拷贝到项目中引用使用。jar包放resources下的jar文件夹

<dependency>
            <groupId>com.alipay</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.0.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/jar/alipay-sdk-java-3.0.0.jar</systemPath>
        </dependency>

项目本地启动好好的,但构建项目jar并启动的时候就有问题了,报一个java.lang.NoClassDefFoundError: com/alipay/api/AlipayApiException错误,这种情况根据经验可以判断我放resources下SDK jar包在maven构建项目jar时被忽略了。

使用WinRar等解压工具查看构建的项目jar【目录路径BOOT-INF/lib】可以查看到支付宝SDK并没有被构建到此文件夹。

解决办法
修改pom.xml,添加resources声明

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources/jar</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <targetPath>BOOT-INF/classes/</targetPath>
            </resource>
        </resources>
    </build>

end

推荐文章:
【代码规范神器】阿里巴巴Java开发规约IDE插件
【小项目】Spring boot基于Redis缓存商城分类,商品信息
Java基于Redis实现“附近的人”

猜你喜欢

转载自blog.csdn.net/qq_19260029/article/details/79825123
今日推荐