类型Set <service>与限定符的不满意依赖关系

时间:2017-01-17 11:39:54

标签: java rest netbeans dependency-injection

我是新手,致力于创建Web服务(Restful api)。遵循Java Brains for Restful Web服务的简单教程。 我正在收到错误,其中包含&#34;不满意的依赖关系类型Set with qualifiers @ Default&#34;

我在这里搜索了不同的问题,尝试了下面的事情:

  1. 下载了新服务器并将其连接到我的项目并删除了旧服务器。
  2. 更新了guava依赖项并将其jar添加到我的项目中。
  3. 仍然面临错误。

    下面是服务器错误日志。

      

    严重:加载应用时出现异常:CDI部署   失败:WELD-001408:类型Set的不满意依赖关系   在注入点使用@Default限定符   [BackedAnnotatedParameter] [BackedAnnotatedConstructor]的参数1   @Inject com.google.common.util.concurrent.ServiceManager(Set)   在   com.google.common.util.concurrent.ServiceManager。(ServiceManager.java:0)   org.jboss.weld.exceptions.DeploymentException:WELD-001408:   类型Set与限定符的不满意依赖关系   注入点@Default [BackedAnnotatedParameter]参数1   [BackedAnnotatedConstructor] @Inject   com.google.common.util.concurrent.ServiceManager(设置)at   com.google.common.util.concurrent.ServiceManager。(ServiceManager.java:0)

    这是提供数据的学生服务类。

    public class StudentService {
        public List<Student> getAllData() {
            Student s1 = new Student(1, "Sagar", 20);
            Student s2 = new Student(2, "Puneet", 23);
            List<Student> list = new ArrayList<>();
            list.add(s1);
            list.add(s2);
            return list;
        }
    }
    

    以下是我的api课程

    @Path("/myfirstapi")
    public class MyFirstAPI {
    StudentService ss=new StudentService();
    @GET
    @Produces(MediaType.APPLICATION_XML)
    public List<Student> gettext() {
        return ss.getAllData();
        }
    }
    

2 个答案:

答案 0 :(得分:5)

此错误的原因通常是Guava的错误版本。你可能有一个版本的Guava&lt;你应该检查你的课程路径。

我可以看到2个解决方案:

  • 如果您正在使用CDI(您似乎没有),请使用版本&gt; = 16更新Guava版本。
  • 否则禁用CDI(如果存在于类路径中,则删除beans.xml,并在应用程序服务器中禁用隐式扫描)。

答案 1 :(得分:0)

您的 Web服务器可能已包含guava 库,并且没有任何问题。所以你需要的是阻止你的guava库进入war文件。有人说(Using Jersey 2.1 with CDI),那个

  

简单地将maava依赖设置为maven中提供的(或测试)解决了问题。

我使用gradle,因此我将依赖项放入compileOnly set:

compileOnly 'org.glassfish.jersey.core:jersey-client:2.0.1'

首先我跑gradle dependencies找出什么是拉番石榴。最后我检查了我的战争,以确认番石榴不再存在。