用spring annotation声明的bean,当打包在jar中时,无法被扫描到
发现一个问题,十分蛋疼。
我们项目是由N个工程组成的,外围工程是web工程,内部的工程打包成jar,放入外围工程的WEB-INF/lib
内部的工程用到了spring的注解,例如@Service、@Controller等,在打成jar包之前,是可以扫描到的,但是打成jar包之后,就扫描不到了,报NoSuchBeanException
在网上搜索了一下,发现了一个办法,就是在用eclipse export jar的时候,勾选add directory entries

这样打出来的jar包,可以解决这个问题,在外围也可以扫描到jar包内用注解声明的bean。如果没有勾上add directory entries,就不行了
用jar命令,比较了一下两种方法打出的jar包的区别,如图:


可以看到,勾选了add directory entries之后打出的jar包,多了路径的信息,可能这就是区别 
不过现在问题是,我们不可能都用手工export jar的方式来一个个导出jar包,不知道在maven中,要配置插件的什么参数,可以达到同样的效果 ,
参考博客:http://kyfxbl.iteye.com/blog/1675368
关于maven的问题我有空研究一下
大神解析:https://blog.csdn.net/xlxxcc/article/details/51142585
为防止链接失效:
转载了部分博客:
Q: 那么我们怎么解决spring 扫描不到jar中class这个问题呢?
A: 有一种做法,就是打jar包的时候,打成JAR file, 然后选择 add directory entries
Q: 那么我们怎么打包成Runable JAR FILE,并且解决spring 扫描不到jar中class的问题?
A:
1、首先使用Eclipse打包,打包成JAR file。
2、上传到Linux, 解压my.jar
unzip my.jar -d myapp
- 1
3、进入 myapp文件夹, 使用以下命令:
java -Djava.ext.dirs=WebContent/WEB-INF/lib cn.com.test
- 1
大功告成
其他技巧:除了上诉使用代码方式查看jar包物理路径,我们还可以是 jar tr my.jar来查看
用spring annotation声明的bean,当打包在jar中时,无法被扫描到的更多相关文章
- 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...
- springMVC项目部署 服务器启动spring容器报错bean未从类加载器中找到
bean未从类加载器中找到 警告: Exception encountered during context initialization - cancelling refresh attempt: ...
- Maven打包成Jar文件时依赖包的问题
我们项目中使用到第三方的库文件,这些jar库文件并没有放到Maven中央库上,导致我们需要在项目中自己配置使用.我们的两三个开发人员对Java都是很熟,因此在使用中遇到了一些问题,表现在:在本地中引入 ...
- 记录一次maven打包时将test目录下的类打包到jar中,Maven Assembly Plugin的使用
今天有人问我打包后找不到主类,运行的类写在test中.按照常规,test目录下的文件不会打包到jar包中.(但是我测试一个springboot工程就可以,这里之后再研究) 具体解决如下 第一步:在po ...
- [DEBUG] spring boot在eclipse中用maven打包成jar访问templates报500错误
更新:打war包的话只要把html文件放在resources/templates下即可,根本不需要放外面. 配置application.yml和templates放外面这种做法,打war包确实不行. ...
- maven将依赖依赖打包到jar中
通过maven-assembly-plugin插件可以实现将依赖jar包打包到自己的jar包中的需求,只需要在pom.xml中配置该插件即可,配置如下: <build> <plugi ...
- spring-boot子模块打包的jar中去掉BOOT-INF文件夹
1.spring-boot maven打包,一般pom.xml文件里会加 <plugin> <groupId>org.springframework.boot</grou ...
- Spring MVC系列-(2) Bean的装配
2. Bean的装配 Spring容器负责创建应用程序中的bean,并通过DI来协调对象之间的关系.Spring提供了三种主要的装配机制: XML显式配置: Java配置类进行显式配置: 隐式的bea ...
- 【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...
随机推荐
- nginx命令介绍
[root@webmaster nginx]# ./sbin/nginx -h nginx version: nginx/1.12.2 Usage: nginx [-?hvVtTq] [-s sign ...
- python实现判断素数
import math def is_prime_1(n): if n <= 1: return False for i in range(2, int(math.sqrt(n) + 1)): ...
- python中函数参数
默认参数注意点 优点:灵活,当没有指定与形参对应的实参时就会使用默认参数 缺陷: 例子: >>> def h(m, l=[]): #默认参数时列 ...
- Thymeleaf 总结
在javaScript中使用表达式 var list = /*[[${list}]]*/ null; <script th:inline="javascript"> ...
- Array(数组)的基本方法
1.定义:var arr=new Array ("12" , "zhang") 2.简写:var arr=[ 12 , "zhang&quo ...
- sybase sql anywhere 5.0 安装后sybase central中无法打开视图等的解决办法
无法打开的原因初步分析要用英文版的xp,后来在如下处发现问题,是sql anywhere的版本太旧了, 可能没有使用Unicode编码,设置一下如下选项可以解决问题.
- sublime text3前端开发插件配置以及使用(个人喜爱)
第一步下载软件接着Ctrl +~ (回车)把下面安装包管理添加到sublimeimport urllib.request,os; pf = 'Package Control.sublime-packa ...
- 洛谷 P1548 棋盘问题
题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(30%) 求出该棋盘中包含有多少个正方形.多少个长方形(不包括正方形). 例如:当 N=2, M= ...
- 10g集群启动顺序
1. 首先, /etc/inittab(不同平台文件名可能不同),文件中的下面3行被调用. h1:35:respawn:/etc/init.d/init.evmd run >/dev/null ...
- 版本号对比方案及参考代码(Objective-C,Java,JavaScript)
常用版本号 如 2.0.1 与 2.0.2 相比 2.0.2是比2.0.1要新的 那么该如何对这个版本号进行对比 这里有一个比较简单的实现方案 2.0.1 这种格式可以拆分为多个部分 如这里的2是大 ...