本文介绍: 在开发基于Maven和SpringBoot项目时,我们经常会使用第三方库来满足需求。然而,有时候我们需要更灵活地控制这些库的依赖范围加载方式本文介绍如何使用Maven和SpringBoot实现定制化的lib目录依赖范围。经过如下定制化后,打包执行jar时就不会报错运行日志报错显示使用lib下中jar的类`ClassNotFoundException`和`NoClassDefFoundError`)

前言

开发基于Maven和SpringBoot项目时,我们经常会使用第三方库来满足需求。然而,有时候我们需要更灵活地控制这些库的依赖范围加载方式本文介绍如何使用Maven和SpringBoot实现定制化的lib目录依赖范围。经过如下定制化后,打包执行jar时就不会报错(运行日志报错显示使用lib下中jar的类ClassNotFoundExceptionNoClassDefFoundError

场景描述

通常情况下,我们会使用特定的第三方库来满足项目需求。在本例中,我们需要使用华为云的Welink接口SDK作为项目的依赖库。首先,让我们了解一下为什么需要使用这个库。Welink接口SDK可以提供与华为云Welink平台集成功能例如用户认证消息推送等。确保项目中的pom.xml文件包含以下依赖项(注意:以下是遐想的dependency,目前Maven中央仓库没有该依赖):

<!--华为云的Welink接口SDK-->
<dependency&gt;
    <groupId&gt;welink</groupId&gt;
    <artifactId>welink-sdk-java</artifactId>
    <version>2.2.0</version>
</dependency>

默认情况下,Maven会从Maven仓库下载该库的jar包,并将其放入项目classpath中。然而,有时候可能会遇到Maven镜像仓库无法下载到该依赖项的情况(例如上述依赖),或者我们希望将这个库作为项目的特定依赖,而不是放在整个项目的classpath中。

解决

步骤

为了实现这个目标,我们可以通过修改该依赖项的scopesystem,并指定systemPath引用我们自己jar包。这样,我们就可以将jar包放入项目的lib目录中,并在pom.xml文件中进行如下配置

<!--华为云的Welink接口SDK-->
<dependency>
    <groupId>welink</groupId>
    <artifactId>welink-sdk-java</artifactId>
    <version>2.2.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/welink-sdk-java-2.2.0.jar</systemPath>
</dependency>

在这个例子中,我们将Welink接口SDK的scope设置system,并指定systemPath为项目根目录下的lib目录中的jar包。
在这里插入图片描述

常见问题解答:

步骤

除了定制化lib目录外,我们还可能需要对依赖项的加载范围进行定制。默认情况下,Maven会将所有的依赖项都打包到生成的可执行jar文件中。然而,在某些情况下,我们可能只希望将某些依赖项作为项目的运行时依赖,而不包含在可执行jar文件中。

在SpringBoot项目中,我们可以通过配置spring-boot-maven-plugin实现这一目标。在pom.xml文件中,我们可以添加以下配置

<build>
    <plugins>
        <!-- 打包插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <includeSystemScope>true</includeSystemScope>
                <mainClass>com.luntek.financialattendance.FinancialAttendanceApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在这个例子中,我们将spring-boot-maven-plugin插件的:

  1. includeSystemScope配置设置true。这样,该插件将会在打包可执行jar文件包含所有的系统作用域的依赖项。
  2. <mainClass>com.luntek.financialattendance.FinancialAttendanceApplication</mainClass>:指定Spring Boot应用程序的主类。这是指定可执行jar文件的入口点,该类将被用作应用程序的入口。在运行可执行jar文件时,会自动加载这个类。您需要将com.luntek.financialattendance.FinancialAttendanceApplication替换为您自己应用程序的主类。
  3. <execution>表示一次插件的执行,可以包含多个<execution>定义
  4. <goals>表示插件目标(goal),指定要执行的插件任务。在这个例子中,我们指定了goalrepackage表示执行重新打包的任务。这个任务会将项目编译、打包为一个可执行jar文件

常见问题解答:

  • Q: 如何确定哪些依赖项需要包含或排除?
    A: 根据项目需求和功能要求,确定哪些依赖项是必需的,并将它们添加到或从可执行jar文件中包含。
  • Q: 如果我的项目包含子模块,该怎么处理这些依赖项?
    A: 每个子模块的依赖项可以在其各自的pom.xml文件中进行配置,以提供更细粒度的控制

总结

通过定制化lib目录和依赖范围,我们可以更灵活地控制项目中使用的第三方库。使用Maven和SpringBoot提供的功能,我们可以根据项目需求来定制依赖项的加载方式,从而提高项目的灵活性和可维护性

建议和最佳实践:

原文地址:https://blog.csdn.net/Da_zhenzai/article/details/134195223

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_26446.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注