关于引入依赖无效(含BOOT-INF目录的jar包)的问题

问题:

        最近在尝试制作自己的工具包时,按照规范实现了自动配置类、属性配置类,实体类和工具类,并在META-INF中指定了自动配置类的位置

        随后,我使用maven的默认打包形式并在demo中引入了依赖,此时依赖是没有报错

但当我在Test中自动注入依赖库的实体类时,类名报红,idea提示可以导入类,但点击后无效,且尝试手动导包时依赖名报红,此时我检查pom.xml与外部库文件都是正常导入了依赖的。

        尝试排错许久后,我开始对比之前成功使用的简易starter的jar包,果然发现它们的软件包名(即反域名:com.xxx.xxx)存储的路径不一样,在简易starter中,软件包名与META-INF同级;而在自制工具类中,软件包名打包后被存在了BOOT-INF目录下的classes文件中(此时BOOT-INF与META-INF同级,软件包为三级)。

用图直观展示:
下图为不使用maven插件打包的jar包目录结构

下图为使用maven插件默认打包的jar包目录结构

解决方式:
        将maven插件删除后直接进行打包:

(删除此plugin后执行打包指令“mvn clean install”)

总结:

1. 可执行性
使用 spring-boot-maven-plugin 的 JAR 包:这种 JAR 包是可执行的,包含了一个内嵌的容器(如 Tomcat),可以直接通过 java -jar 命令启动应用。
不使用插件的 JAR 包:这种 JAR 包通常是普通的库文件,不能直接运行。它们通常用于作为依赖库被其他项目引用。
2. 依赖管理
使用 spring-boot-maven-plugin 的 JAR 包:这种 JAR 包会将所有依赖项打包到一个单独的 JAR 文件中,形成一个“胖 JAR”(fat JAR)。这样可以确保所有依赖项都包含在内,便于部署和运行
不使用插件的 JAR 包:这种 JAR 包通常只包含项目的编译类文件,不包含任何依赖项。运行时需要手动配置依赖项。
3. 结构
使用 spring-boot-maven-plugin 的 JAR 包:这种 JAR 包有一个特定的目录结构,通常包含 BOOT-INF 目录,其中包含应用的类文件和依赖项。
不使用插件的 JAR 包:这种 JAR 包的目录结构通常比较简单,只包含项目的类文件。
4. 启动方式
使用 spring-boot-maven-plugin 的 JAR 包:可以通过 java -jar your-app.jar 直接启动应用。
不使用插件的 JAR 包:需要通过类路径指定所有依赖项,例如 java -cp your-app.jar:dependency1.jar:dependency2.jar com.yourcompany.YourMainClass。
5. 配置
使用 spring-boot-maven-plugin 的 JAR 包:插件会自动处理许多配置,如主类的识别、依赖项的打包等。
不使用插件的 JAR 包:需要手动配置这些细节,包括主类的指定和依赖项的管理。
总结
使用 spring-boot-maven-plugin 的 JAR 包:适合独立运行的应用,包含所有依赖项,易于部署和运行。
不使用插件的 JAR 包:适合作为库文件被其他项目引用,不包含依赖项,需要手动管理依赖

疑惑:

        可执行的jar包应该如何使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值