payara micro 5.182不部署使用java10编译的web应用程序

payara micro 5.182不部署使用java10编译的web应用程序,java,java-bytecode-asm,payara,java-10,payara-micro,Java,Java Bytecode Asm,Payara,Java 10,Payara Micro,当使用Java10启动payara 5.182时,它抛出以下IllegalArgumentException [java] Exception while visiting WEB-INF/classes/com/Service.class of size 1163 [java] java.lang.IllegalArgumentException [java] at org.glassfish.hk2.external.org.objectweb.asm.ClassReade

当使用Java10启动payara 5.182时,它抛出以下IllegalArgumentException

 [java]   Exception while visiting WEB-INF/classes/com/Service.class of size 1163
 [java] java.lang.IllegalArgumentException
 [java]     at org.glassfish.hk2.external.org.objectweb.asm.ClassReader.<init>(ClassReader.java:160)
 [java]     at org.glassfish.hk2.external.org.objectweb.asm.ClassReader.<init>(ClassReader.java:143)
 [java]     at org.glassfish.hk2.external.org.objectweb.asm.ClassReader.<init>(ClassReader.java:418)
 [java]     at org.glassfish.hk2.classmodel.reflect.Parser$5.on(Parser.java:359)
 [java]     at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.handleEntry(ReadableArchiveScannerAdapter.java:165)
 [java]     at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.onSelectedEntries(ReadableArchiveScannerAdapter.java:127)
 [java]     at org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:345)
 [java]     at org.glassfish.hk2.classmodel.reflect.Parser.access$300(Parser.java:68)
 [java]     at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:304)
 [java]     at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:293)
 [java]     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
 [java]     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
 [java]     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
 [java]     at java.base/java.lang.Thread.run(Thread.java:844)
 [java] ]]
在asm版本6.2中,类读取器似乎与Java11兼容

ClassReader(
  final byte[] classFileBuffer, final int classFileOffset, final boolean checkClassVersion) {
  this.b = classFileBuffer;
  // Check the class' major_version. This field is after the magic and minor_version fields, which
  // use 4 and 2 bytes respectively.
  if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V11) {
    throw new IllegalArgumentException(
        "Unsupported class file major version " + readShort(classFileOffset + 6));
  }
  ...
}

问题是,如何让payara 5.182使用Java10运行?

payara Micro 5.182不支持JDK9+,只支持JDK8。JDK11预计将在今年最后一个季度支持5.184。

您是否使用了maven之类的依赖项管理工具?您能否查看正在使用的payara jar的可传递依赖项,并确认ASM的版本似乎没有从发行说明中升级到最新版本。我通过ant任务从eclipse光子启动payara micro(payara-micro-5.182.jar),而部署的应用程序是通过maven创建的。为了找到asm版本,我从MICRO-INF/runtime/asm-repackaged.jar查看了清单文件,这是Bundle版本:6.0给你,版本6.1开始学习JDK 10是什么,这可能就是为什么会出现
IllegalArgumentException
。似乎我必须回到JDK8,或者是否有可能将payara中的asm迁移到6.2?我的意思是,payara 5.182附带了asm和另外一个重新打包的asm,因此标准asm的迁移没有什么大不了的,但是重新打包的asm呢,你知道吗?这样我就不必等到正式的JDK11支持了。@bombadil不幸的是,仅仅更新asm不足以让Payara在JDK 9+上工作,因为Payara的所有依赖项也需要更新。重新打包的asm来自HK2,该版本尚未准备好JDK9+。
ClassReader(
  final byte[] classFileBuffer, final int classFileOffset, final boolean checkClassVersion) {
  this.b = classFileBuffer;
  // Check the class' major_version. This field is after the magic and minor_version fields, which
  // use 4 and 2 bytes respectively.
  if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V11) {
    throw new IllegalArgumentException(
        "Unsupported class file major version " + readShort(classFileOffset + 6));
  }
  ...
}