在外部库

时间:2015-11-06 09:23:27

标签: java maven cdi

我正在编写自己的小MVC框架,并且我正在尝试集成CDI。 这个概念类似于Spring MVC,有ServletDispatcher和@Controller注释。

使用@Controller映射的类应该是托管bean。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@IndexAnnotated
@RequestScoped
public @interface Controller {
    String value() default "";
}

然后,我想从我的应用程序上下文中检索我的库中的Controller类,如

Object controller = CDI.current().select(controllerClass).get();

但是我得到了

java.lang.ClassNotFoundException: javax.enterprise.inject.spi.CDI

我在我的库中添加了对pom.xml的依赖

<dependency>
      <groupId>javax.enterprise</groupId>
      <artifactId>cdi-api</artifactId>
      <version>1.2</version>
</dependency>

我的项目中也存在使用此库的内容。已经尝试将范围改为提供,但没有运气。

bean.xml存在于我的库和项目的main / webapp / WEB-INF / bean.xml

我错过了什么?是否有可能让库从使用该库的应用程序的上下文中重新启动bean?

我的应用服务器是TomEE

2 个答案:

答案 0 :(得分:1)

TomEE支持Java EE 6 / CDI 1.0。

Java EE 7 / CDI 1.1中引入了

javax.enterprise.inject.spi.CDI

当容器基于旧版本时,您无法简单地升级规范API。

答案 1 :(得分:0)

感谢TomEE仅支持Java EE6的提示。溶液

.hidden {
  display: none;
}