`

用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中,要配置插件的什么参数,可以达到同样的效果
  • 大小: 10.1 KB
  • 大小: 8.6 KB
  • 大小: 13.9 KB
分享到:
评论
13 楼 levin_china 2018-03-20  
勾选了,还是找不到
12 楼 GGGGeek 2017-11-22  
我用的maven-3.5.0,还没有遇到这种情况,使用jar tf查看jar包后,发现符合add directory entries结构
11 楼 wabiaozia 2017-03-04  
      
10 楼 kyfxbl 2015-07-26  
etffff 写道
你是我的好哥哥,这个问题让我也头疼了一个星期,太感谢了!!!                    


哈哈
9 楼 etffff 2015-07-25  
你是我的好哥哥,这个问题让我也头疼了一个星期,太感谢了!!!                    
8 楼 haojinghua 2014-12-10  
感谢分享,我也遇到了
7 楼 q315506754 2014-09-15  
哎 这问题纠结了我好久  感谢lz乐于分享的精神
6 楼 sswh 2014-05-23  
没有留意到这样的情况。

多谢楼主分享了

只是比较奇怪, Spring注解类的扫描和这个目录结构信息有什么影响?

有时间的话,这个问题真的需要仔细查看一下。

也是比较有意思的问题。
5 楼 Reset 2014-05-06  
Maven的 可以看看这篇文章

http://yizhilong28.iteye.com/blog/1146830
4 楼 gy3135990 2014-01-14  
谢谢了,解决了我的问题
3 楼 stephansun 2013-12-31  
maven中的assemble插件可以解决这个问题
2 楼 hekuilove 2013-07-29  
解决了问题,感谢楼主。。
1 楼 waterborn 2013-04-09  
我也遇到了。

相关推荐

    javax.annotation-api-1.3.2 jar包.rar

    例如,如果你有一个名为"userDAO"的bean,你可以在需要使用它的类中声明一个成员变量,并用`@Resource(name="userDAO")` 注解,这样Spring容器就会自动将"userDAO"注入到这个变量中。 3. **javax.annotation-api-...

    jar包_javax.annotation.zip

    总结起来,`javax.annotation.zip`这个压缩包中的`javax.annotation-api-1.3.2.jar`是Java开发中处理注解的关键库,特别是对于依赖注入和IoC场景,如使用`@Resource`注解进行Bean装配。如果在项目中遇到`@Resource`...

    Struts2+Spring2+Hibernate3+Annotation所需JAR包

    - **aopalliance-1.0.jar**:支持AOP编程的标准接口定义,虽然不是必需的,但在使用Spring AOP时会用到。 #### 5. 日志系统 - **log4j-1.2.16.jar**:Apache Log4j的日志记录工具,广泛应用于Java应用的日志记录。...

    spring4.3.9版本jar包及开发常用jar包

    Spring框架本身并不绑定到特定的日志实现,而是通过`spring-context-support.jar`中的`org.springframework.jmx.export.annotation.AnnotationMBeanExporter`类提供对各种日志系统的支持。在实际项目中,根据需求...

    Spring Boot技术知识点:Bean装配1

    当我们在项目中引入特定的库时,Spring Boot会根据类路径下存在的jar包和配置文件尝试进行自动配置。例如,如果检测到`spring-web`模块,Spring Boot会自动配置Web环境,包括DispatcherServlet和...

    spring+quartz需要的4个jar包 不需要6个

    为了在项目中集成Spring和Quartz,你需要将这些jar添加到项目的类路径中。如果你使用的是Maven或Gradle,可以将它们添加为依赖。例如,在Maven的`pom.xml`文件中,你可以这样配置: ```xml <groupId>org.spring...

    org.springframework.core.jar

    5. **排序与比较**:`org.springframework.core.order`和`org.springframework.core.type`包提供了排序算法和类型比较机制,对于Spring容器中bean的排序和类型检查起到了关键作用。 6. **事件驱动**:`org.spring...

    javax.annotation-3.1.2.2-sources.jar.zip

    在Java编程领域,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境用来执行各种任务,如验证、部署、性能分析等。在本文中,我们将详细探讨javax.annotation包中...

    struts2 hibernate3 spring2.5 annotation 整合

    使用注解的方式整合,例如,在Action类中,可以使用`@Autowired`注解让Spring自动注入需要的服务。在Hibernate实体类上,可以使用`@Entity`声明为数据库表,`@Id`标识主键,`@ManyToOne`、`@OneToMany`等表示关联...

    spring--redis所需要的所有jar

    2. **配置Redis连接**:在Spring的配置文件中,需要定义一个`JedisConnectionFactory`来创建到Redis服务器的连接。配置包括服务器地址、端口、密码、超时时间等。 ```xml <bean id="jedisConnectionFactory" ...

    org.aspectj.lang.annotation.Around所需要的包

    在Java编程环境中,有时我们可能会遇到“java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around”的错误,这通常意味着运行时环境无法找到特定的类,即`org.aspectj.lang.annotation.Around`。...

    Annotations 所需jar包.rar

    - 运行时注解:在程序运行时被JVM或者框架解析,实现动态行为。 5. **使用注解的优点**: - 减少XML配置:通过注解,可以在代码中直接配置,减少XML配置文件的复杂度。 - 提高可读性:注解使代码更直观,更容易...

    SpringMVC-Annotation

    在传统的SpringMVC中,我们需要在XML配置文件中声明DispatcherServlet、视图解析器、模型-视图-控制器(MVC)组件等。但在现代Spring项目中,我们倾向于使用注解来减少XML配置。例如,`@Controller`用于标记一个类...

    SpringMVC-annotation

    在传统的SpringMVC应用中,我们需要在`web.xml`中配置DispatcherServlet,并在Spring的上下文配置文件中声明各种bean。然而,随着Spring的发展,注解驱动的配置已经成为主流,使得开发更加便捷和高效。"注解配置...

    spring3.0.jar

    2. **注解驱动开发(Annotation-based Development)**:在Spring 3.0中,注解成为主流的编程模式,如@Controller、@Service、@Repository和@Transactional等,减少了XML配置,提高了代码的可读性和可维护性。...

    ssh2 annotation 基本jar

    在这个“ssh2 annotation 基本jar”中,我们主要关注的是这三大框架在使用注解(Annotation)时的基础知识。 **Struts2** 是一个基于MVC设计模式的Web应用框架,用于简化Java Web应用的开发。在Struts2中,注解被...

    struts2+hibernate+annotation+spring整合的jar包

    4. **整合Spring和Hibernate**:使用Spring管理Hibernate的SessionFactory,实现依赖注入,可以在Spring配置文件中定义SessionFactory bean,并通过@Autowired注解注入到需要用到的地方。 5. **整合Struts2和Spring*...

    spring3.0jar包集合

    在Spring 3.0中,批注(Annotation)被更广泛地用于配置,替代了XML配置文件。例如,`@Autowired`用于自动装配依赖,`@Service`、`@Repository`和`@Controller`用于组件的标记,`@Transactional`用于标记事务边界。...

    org.springframework.test-3.0.2.RELEASE.jar

    1. **ApplicationContextLoader**:该组件负责在测试环境中加载Spring的应用上下文,使测试类能够访问到Bean定义和依赖注入。 2. **TestContext**:测试上下文提供了一种在测试类中访问和管理应用上下文的方法,...

    spring MVC所需jar包和filter的配置

    在开发基于Spring MVC的Web应用程序时,正确配置所需的jar包和Filter是至关重要的步骤。Spring MVC是一个强大的MVC(Model-View-Controller)框架,它为构建Java Web应用提供了丰富的功能和灵活性。以下是对标题和...

Global site tag (gtag.js) - Google Analytics