Java springboot @ComponentScan 扫描依赖里的组件, idea 里正常运行, 打包成 jar 包后却扫描不到了

13 天前
 5bb864e1fc775087

一个 springboot 项目, 我想让它扫描依赖里面的组件, 所以用了 @ComponentScan 注解指定了几个包名 同样的代码我在 idea 里直接运行 Application 是能正常识别到依赖里的组件并正常运行. 但是用 maven 打包成 jar 包后运行却没有扫描到依赖里的组件. 这个 jar 包将近 1G 大小, 并且解压后我要的那些依赖也有包含在 jar 包里 然后我试着把 springboot 日志级别改为 debug, 发现同样在 scanCandidateComponents 阶段, 在 idea 里直接运行时日志会打印出很多组件(包含我想要的组件和不想要的组件都有), 但运行 jar 包的时候却只打印出主包里面的组件 这个有没有人遇到过, 怎么处理 [main] DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - [scanCandidateComponents,435] - Identified candidate component class:

560 次点击
所在节点    问与答
13 条回复
Ashe007
12 天前
问题没描述清楚吧?如果你所称的依赖是本地 sdk 的话,需要你 Maven 打包方式显式声明域 system scope

其他情况没有思路
JamesMackerel
12 天前
unzip 出来看看到底有没有。
nekomiao
12 天前
一楼说的对
xiangyuecn
12 天前
吐槽一下 把 jar 打包进 jar 不知道是哪个人才想出来的😂 1MB 不到的业务逻辑 改一个字节 就得打包出全新的 1GB jar😂 放哪都不好使
ZZ74
12 天前
@xiangyuecn 因为这样最无脑方便。
sunrealzhang
12 天前
打包的问题吧,包里 classpath 之类的文件有包含你的那些依赖包吗
5bb864e1fc775087
12 天前
@sunrealzhang “包里 classpath 之类的文件”
你这句话指的是 jar 包解压出来后里面的这个文件么:BOOT-INF/classpath.idx
那是有的,里面有这样的语句,hh-basic-3.6.3.jar 就是我要的依赖:
- "BOOT-INF/lib/hh-basic-3.6.3.jar"
5bb864e1fc775087
12 天前
@JamesMackerel 解压过了,里面有我要的 jar 包
5bb864e1fc775087
12 天前
@Ashe007 不是本地 sdk 。这个项目有 A,B,C 3 个模块的代码,A 模块是主模块,A 模块依赖 B 和 C 模块,B 和 C 模块有我要扫描的组件。现在依赖是下面这么写的,我查了下 scope 改成 system 需要手动指定 jar 包路径,好像不适用这种情况
<dependency>
<groupId>com.hh.pms</groupId>
<artifactId>hh-basic</artifactId>
<version>3.6.3</version>
<scope>compile</scope>
</dependency>
sunrealzhang
12 天前
@5bb864e1fc775087 META-INF/MANIFEST.MF 文件里有类似
Spring-Boot-Lib: BOOT-INF/lib/
的配置吗,是用 springboot 的插件打的包吗
5bb864e1fc775087
12 天前
@sunrealzhang #6
META-INF/MANIFEST.MF 文件里有这行:Spring-Boot-Lib: BOOT-INF/lib/
这个是 pom.xml 里的打包插件:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
sunrealzhang
12 天前
@sunrealzhang 看起来没什么特别的,和我日常打的 jar 包没啥区别,看来帮不到你了不好意思
5bb864e1fc775087
12 天前
@sunrealzhang #12 没事

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1049386

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX