在 Glassfish 4 上焊接 001508 异常:如何忽略接口?

Weld 001508 exception on Glassfish 4: how to ignore interface(s)?

问题:尝试将我的 WAR 部署到 Glassfish 4.1.1 时,我不断收到以下 WELD 异常。该应用程序在 Wildfly 9.0 上正确部署。

Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: org.jboss.weld.exceptions.DefinitionException: WELD-001508: Cannot create an InjectionTarget from [EnhancedAnnotatedTypeImpl] public abstract interface @Path class com.example.package.MyService as it is an interface

这里,MyService确实是一个接口,定义在一个单独的库中。我的应用程序将库拉入,以便它可以针对 MyService 接口创建代理并发出请求。 MyService 看起来像:

@Path("api")
public interface MyService {

    @GET
    public void someMethod();
}

我尝试通过将以下内容添加到 beans.xml 文件来从 WELD 中排除 MyService,但无济于事:(

<scan>
    <exclude name="com.example.package.*"></exclude>
</scan>

您也可以尝试创建 package-info.java 文件并使用 @Vetoed:

@Vetoed
package com.example.package;

import javax.enterprise.inject.Vetoed;

好吧,我没能找到根本原因。但是,我最终通过从配置文件中删除了一堆 Resteasy 依赖项来让它工作,这可能是问题的根本原因。 (对于上下文,我正在从 Wildfly/Resteasy 迁移到 Glassfish/Jersey)。

有时,我仍然会遇到此错误(不确定为什么),但是干净且 re-building 的程序包会使它消失。