Glassfish服务器不适用于JDK 8

ons*_*sm7 6 java glassfish java-8

我在使用NetBeans的web项目中使用带有lambda的jdk 8,但是当它部署到glassfish时它会向我显示以下错误:

java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
Run Code Online (Sandbox Code Playgroud)

这是由包含lambda表达式的代码行引起的.

我尝试更改glassfish设置以使用jdk 8,但我没有让它工作.

有没有办法使它工作?

Mar*_*son 7

我已经观察到使用GlassFish 4结合JDK 8的各种奇怪的行为.似乎是在使用Java 1.8中引入的新语法时,使用新功能的类将ArrayIndexOutOfBoundsException在启动期间触发读取如下内容:

   Exception while visiting
 martinandersson/com/malivechat/ejb/events/EventService.class of size
 7094

 java.lang.ArrayIndexOutOfBoundsException: 25966
   at org.objectweb.asm.ClassReader.readClass(ClassReader.java:2015)
   at org.objectweb.asm.ClassReader.accept(ClassReader.java:469)
   at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
   at org.glassfish.hk2.classmodel.reflect.Parser$5.on(Parser.java:362)
   at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.handleEntry(ReadableArchiveScannerAdapter.java:165)
   at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.onSelectedEntries(ReadableArchiveScannerAdapter.java:127)
   at org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:347)
   at org.glassfish.hk2.classmodel.reflect.Parser.access$300(Parser.java:67)
   at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:306)
   at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:295)
   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)

有时,GlassFish检查的类在"崩溃"中幸存,可以在应用程序中正确使用,有时不能.崩溃的类有时会阻碍您的应用程序被部署.GlassFish抱怨无法找到或实例化所需类型的bean.有时,崩溃类不会阻碍部署成功,但是当他使用时,类会以某种方式失败.例如,bean中注入的资源将失败,您的应用程序将不可避免地抛出一个NullPointerException.

除了GlassFish不支持JDK 1.8这一事实之外,Java本身似乎每次都试图构建我的项目时都会崩溃,而我的JavaFX应用程序有时会出现问题,而且他制作的各种组件非常多.太.所以生产代码肯定会暂时不再升级到Java 1.8.

更新

我也遇到过EclipseLink 2.5.2-M1的严重问题.我的一个实体类在Java 1.7中完美地运行,然后我在其中添加了一些简洁的JDK 8语法.之后,EclipseLink拒绝让实体类成为JPA关系的目标.EclipseLink表示实体类是"非实体"类型.一旦我将JDK 8糖重写为传统1.7代码,所有工作都再次正常.

更新2014-07-03

GlassFish 4.0.1-b05只有Java 1.8代码的一个问题:JPA实体类.这意味着EclipseLink存在问题.但我可以确认Java 1.8代码在EJB:s和CDI托管bean中有效.


Aru*_*pta 6

我尝试使用JDK8运行GlassFish,但也无法启动.

提交了一份JIRA问题GLASSFISH-19263用于跟踪目的.