在 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>
- 为什么 WELD 试图包含该库的接口?
- 如何让它忽略它?
您也可以尝试创建 package-info.java
文件并使用 @Vetoed
:
@Vetoed
package com.example.package;
import javax.enterprise.inject.Vetoed;
好吧,我没能找到根本原因。但是,我最终通过从配置文件中删除了一堆 Resteasy 依赖项来让它工作,这可能是问题的根本原因。 (对于上下文,我正在从 Wildfly/Resteasy 迁移到 Glassfish/Jersey)。
有时,我仍然会遇到此错误(不确定为什么),但是干净且 re-building 的程序包会使它消失。
问题:尝试将我的 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>
- 为什么 WELD 试图包含该库的接口?
- 如何让它忽略它?
您也可以尝试创建 package-info.java
文件并使用 @Vetoed
:
@Vetoed
package com.example.package;
import javax.enterprise.inject.Vetoed;
好吧,我没能找到根本原因。但是,我最终通过从配置文件中删除了一堆 Resteasy 依赖项来让它工作,这可能是问题的根本原因。 (对于上下文,我正在从 Wildfly/Resteasy 迁移到 Glassfish/Jersey)。
有时,我仍然会遇到此错误(不确定为什么),但是干净且 re-building 的程序包会使它消失。