未对注释类型Resource定义属性查找

时间:2013-07-31 07:02:26

标签: eclipse java-ee jms

给JMS第一枪,当我尝试注入@Resource(lookup="jms/ConnectionFactory")时,我收到错误:

  

对于注释类型Resource

,未定义属性查找

我刚读过How to use java ee 6 @Resource annotation,但我还没有学过Maven,所以我想知道,如果我能用其他方式解决这个问题而不是使用Maven?

顺便说一句,我正在使用Eclipse。

3 个答案:

答案 0 :(得分:4)

正确的解决方法是在Eclipse中右键单击您的项目,Java Build Path - >订单和导出,选择JRE系统库,然后单击底部。

答案 1 :(得分:1)

尝试将mappedName属性用作:

@Resource(mappedName="jms/ConnectionFactory")

此外,如果您仍想使用查找,请查看您正在使用的javax.annotation.jar。 Lookup属性是在JavaEE 6中引入的。可能你有一个旧版本。

答案 2 :(得分:1)

Java EE 6开发人员遇到的一个常见问题是@Resource注释的使用与JDK内置的@ javax.annotation.Resource冲突。这里我们将展示如何解决Eclipse和Maven中的编译问题。

如果您查看Java EE 6中包含的@Resource注释,它将包含lookup属性。不幸的是,正如我们所说,JDK本身提供了自己的@ javax.annotation.Resource版本,它没有这个属性。如果您使用Eclipse或Maven,这会导致编译问题。

public class MyCache {
    @Resource(lookup="java:jboss/infinispan/container/cluster")
    private CacheContainer container;
}

[ERROR]符号:方法查找() [错误]位置:@interface javax.annotation.Resource 在Eclipse环境中解决问题非常简单:您需要做的就是添加@Resource注释的JBoss EE 6实现 - 并且 - 将它放在JDK库之前

@resource maven查找 JBoss库应该在AS 7发行版中命名为jboss-annotations-api_1.1_spec-1.0.0.Final.jar(或者类似的东西),jboss-annotations-api_1.1_spec-1.0.1.Final-redhat- 2.阅读EAP 6中的内容

如果您正在使用Maven进行编译,那么解决此问题的最简单方法是将注释JAR库添加到JDK的背书目录中,以便它将覆盖默认的@Resource实现。

需要将注释JAR复制到JDK发行版的JAVA_HOME / jre / lib / endors中。

作为替代方法,您可以将-Djava.endorsed.dirs传递给JVM参数,如Eclipse中的以下Maven构建所示