Java 无法在Glassfish 4.0中执行CDI

Java 无法在Glassfish 4.0中执行CDI,java,jakarta-ee,glassfish,cdi,glassfish-4,Java,Jakarta Ee,Glassfish,Cdi,Glassfish 4,我正在尝试使用Glassfish 4.0的最新升级版本运行一个特别简单的测试用例。我尝试过将META-INF/beans.xml放在所有可能的排列中,包括它自己的jar在WEB-INF/lib中 我得到的最好结果是,在布局+源之后列出了以下错误: WARNING: Error while trying to load Bean Class WEB-INF.classes.com.example.cdibug.Test : java.lang.ClassNotFoundException: WEB

我正在尝试使用Glassfish 4.0的最新升级版本运行一个特别简单的测试用例。我尝试过将META-INF/beans.xml放在所有可能的排列中,包括它自己的jar在WEB-INF/lib中

我得到的最好结果是,在布局+源之后列出了以下错误:

WARNING: Error while trying to load Bean Class WEB-INF.classes.com.example.cdibug.Test : java.lang.ClassNotFoundException: WEB-INF.classes.com.example.cdibug.Test
WARNING: Error while trying to load Bean Class WEB-INF.classes.com.example.cdibug.Foo : java.lang.ClassNotFoundException: WEB-INF.classes.com.example.cdibug.Foo
WARNING: Error while trying to load Bean Class WEB-INF.classes.com.example.cdibug.App : java.lang.ClassNotFoundException: WEB-INF.classes.com.example.cdibug.App
INFO: Registering the Jersey servlet application, named com.example.cdibug.App, at the servlet mapping /rest/*, with the Application class of the same name.
INFO: Loading application [cdibug] at [/cdibug]
INFO: cdibug was successfully deployed in 106 milliseconds.
布局:

$ jar tvf cdibug.war 
     0 Tue May 07 23:19:48 HST 2013 META-INF/
    68 Tue May 07 23:19:48 HST 2013 META-INF/MANIFEST.MF
     0 Tue May 07 23:14:20 HST 2013 META-INF/beans.xml
     0 Tue May 07 23:19:32 HST 2013 WEB-INF/
     0 Tue May 07 23:18:58 HST 2013 WEB-INF/classes/
     0 Tue May 07 22:51:54 HST 2013 WEB-INF/classes/com/
     0 Tue May 07 22:51:54 HST 2013 WEB-INF/classes/com/example/
     0 Tue May 07 23:09:34 HST 2013 WEB-INF/classes/com/example/cdibug/
   174 Tue May 07 22:54:28 HST 2013 WEB-INF/classes/com/example/cdibug/Test.java
   171 Tue May 07 22:54:04 HST 2013 WEB-INF/classes/com/example/cdibug/App.java
   309 Tue May 07 22:56:30 HST 2013 WEB-INF/classes/com/example/cdibug/Foo.java
   398 Tue May 07 23:06:00 HST 2013 WEB-INF/classes/com/example/cdibug/Test.class
   304 Tue May 07 23:06:00 HST 2013 WEB-INF/classes/com/example/cdibug/App.class
   634 Tue May 07 23:06:00 HST 2013 WEB-INF/classes/com/example/cdibug/Foo.class
$
beans.xml的来源:

App.java的来源:

Test.java的来源:

Foo.java的来源:


这是EclipseKeplerM6捆绑版本中的一个bug。它在4.0.0-b87下运行良好,这看起来像Glassfish中的一个bug,除非包装混乱。你试过将beans.xml放入WEB-INF吗?是的,我试过了。如果将beans.xml放在WEB-INF中,它似乎会被忽略。CDI中绝对没有任何消息/生命迹象,public Foo{/*…*/}中的三条消息都不可见。我还在一个更复杂的例子中尝试了它,在这个例子中,我试图@injection一个应用程序范围的bean,而当beans.xml在WEB中时,注入尝试抛出了一个错误-INF@LightGuard谢谢包装细节在我的帖子中的jar-tvf命令的输出中,我非常确定它是好的。您使用了JavaEE7的任何特性吗?如果没有,请尝试Glassfish 3.1.2。可能是因为他们还没有完成焊接2的集成
$ cat META-INF/beans.xml # EMPTY 0 bytes
$ cat WEB-INF/classes/com/example/cdibug/App.java 
package com.example.cdibug;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class App extends Application {
}
$ cat WEB-INF/classes/com/example/cdibug/Test.java 
package com.example.cdibug;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/test")
public class Test {
  @GET
  public String greet () {
    return "hello";
  }
}
$ cat WEB-INF/classes/com/example/cdibug/Foo.java 
package com.example.cdibug;

import java.util.logging.Logger;

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class Foo {
  public Foo () {
    System.out.println("stdout: Foo()");
    System.err.println("stderr: Foo()");
    Logger.getGlobal().info("global_log: Foo()");
  }
}