2015-12-16 21 views
1

問題:在嘗試將WAR部署到Glassfish 4.1.1時,我總是收到WELD異常。該應用程序在Wildfly 9.0上正確部署。Glassfish 4上的焊接001508異常:如何忽略接口(s)?

異常而加載的應用程序:java.lang.IllegalStateException:ContainerBase.addChild:啓動:org.apache.catalina.LifecycleException:org.apache.catalina.LifecycleException:org.jboss.weld.exceptions.DefinitionException: WELD-001508:不能創建從[EnhancedAnnotatedTypeImpl]公共抽象接口@Path類com.example.package.MyService一個InjectionTarget,因爲它是一個接口

這裏,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努力包括該庫的接口?
  • 如何告訴它忽略它?
+0

您是否碰巧爲此接口定義了一個生產者方法?我同意從這方面不清楚 –

+0

不,沒有生產者的方法... – Rodrigo

回答

0

好了,我沒能找到這種情況的根本原因。但是,我最終通過從配置文件中刪除了一堆Resteasy依賴項來解決這個問題,這可能是問題的根本原因。 (就上下文而言,我從Wildfly/Resteasy遷移到Glassfish/Jersey)。

有時,我仍然得到這個錯誤(不確定爲什麼),但一個乾淨的和重新構建的包使它消失。

0

您也可以嘗試創建package-info.java文件,並使用@Vetoed

@Vetoed 
package com.example.package; 

import javax.enterprise.inject.Vetoed;