Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Glassfish4:war文件中WEB-INF/lib/jackson-*.jar中的Java9 module-info.class导致的异常?_Java_Gradle_Glassfish 4 - Fatal编程技术网

Glassfish4:war文件中WEB-INF/lib/jackson-*.jar中的Java9 module-info.class导致的异常?

Glassfish4:war文件中WEB-INF/lib/jackson-*.jar中的Java9 module-info.class导致的异常?,java,gradle,glassfish-4,Java,Gradle,Glassfish 4,我不想让你失望 javax.enterprise.system.tools.deployment.common: Exception while visiting module-info.class 在Glassfish4启动和部署期间,我的日志文件中出现以下异常 我们在Java8下使用glassfish4,目前还不能升级。然而,我们确实需要相对较新版本的Jackson(2.10.3)来支持和支持 异常发生在启动和部署期间,因为“fat”.war文件包含例如WEB-INF/lib/jackso

我不想让你失望

javax.enterprise.system.tools.deployment.common: Exception while visiting module-info.class
在Glassfish4启动和部署期间,我的日志文件中出现以下异常

我们在Java8下使用glassfish4,目前还不能升级。然而,我们确实需要相对较新版本的Jackson(2.10.3)来支持和支持

异常发生在启动和部署期间,因为“fat”
.war
文件包含例如
WEB-INF/lib/jackson-annotations-2.10.3.jar
,而这个相对较新的
jackson-annotations-2.10.3.jar
文件在其根目录下包含一个为java 9编译的
模块信息.class
。这导致在Java8上运行的glassfish4记录如下异常。异常记录的严重程度为
错误
,但我(尚未?)发现任何因此而不起作用的情况

如何从日志中删除异常

这样做是可行的,但令人讨厌且容易出错的是:将.war文件解压缩到一个文件夹中。对于每个jackson jar文件
zip-d$file module info.class
。用修改后的jackson jar文件重新打包.war文件。现在我已经通过外科手术删除了
模块info.class
文件,它可以正常工作,但有一股难闻的气味

我希望的是:

  • glassfish4的一个选项是忽略.jar文件中无法读取的Java9或更新的文件
  • 阻止glassfish4从
    WEB-INF/lib/jackson-annotations-2.10.3.jar加载某些类文件的方法,例如
    module info.class
  • gradle从war文件中排除上述内容的一种方法,这样glassfish4就不会看到它们
我甚至找不到任何关于
javax.enterprise.system.tools.deployment.common
的文档。Glassfish4将使用JavaEE7,但没有提到该类

一个例外示例:

20:45:00.766 ERROR [  ](157) javax.enterprise.system.tools.deployment.common: Exception while visiting module-info.class of size 190
    java.lang.IllegalArgumentException: null
        at org.glassfish.hk2.external.org.objectweb.asm.ClassReader.<init>(ClassReader.java:170) ~[asm-all-repackaged.jar:?]
        at org.glassfish.hk2.external.org.objectweb.asm.ClassReader.<init>(ClassReader.java:153) ~[asm-all-repackaged.jar:?]
        at org.glassfish.hk2.external.org.objectweb.asm.ClassReader.<init>(ClassReader.java:424) ~[asm-all-repackaged.jar:?]
        at org.glassfish.hk2.classmodel.reflect.Parser$5.on(Parser.java:359) [class-model.jar:?]
        at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.handleEntry(ReadableArchiveScannerAdapter.java:165) [kernel.jar:?]
        at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.onSelectedEntries(ReadableArchiveScannerAdapter.java:127) [kernel.jar:?]
        at org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:345) [class-model.jar:?]
        at org.glassfish.hk2.classmodel.reflect.Parser.access$300(Parser.java:68) [class-model.jar:?]
        at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:304) [class-model.jar:?]
        at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:293) [class-model.jar:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_265]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_265]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_265]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_265]
20:45:00.766错误[](157)javax.enterprise.system.tools.deployment.common:访问大小为190的module-info.class时发生异常
java.lang.IllegalArgumentException:null
在org.glassfish.hk2.external.org.objectweb.asm.ClassReader.(ClassReader.java:170)~[asm all repacked.jar:?]
在org.glassfish.hk2.external.org.objectweb.asm.ClassReader.(ClassReader.java:153)~[asm all repackaged.jar:?]
在org.glassfish.hk2.external.org.objectweb.asm.ClassReader.(ClassReader.java:424)~[asm all repackaged.jar:?]
在org.glassfish.hk2.classmodel.reflect.Parser$5.on(Parser.java:359)[classmodel.jar:?]
在com.sun.enterprise.v3.server.ReadableArchiveScanerAdapter.handleEntry(ReadableArchiveScanerAdapter.java:165)[kernel.jar:?]
在com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.onSelectedEntries(readableArchiveScanerAdapter.java:127)[kernel.jar:?]
在org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:345)[classmodel.jar:?]
在org.glassfish.hk2.classmodel.reflect.Parser.access$300(Parser.java:68)[classmodel.jar:?]
在org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:304)[classmodel.jar:?]
在org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:293)[classmodel.jar:?]
在java.util.concurrent.FutureTask.run(FutureTask.java:266)[?:1.8.0_265]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)[?:1.8.0_265]
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)[?:1.8.0_265]
在java.lang.Thread.run(Thread.java:748)[?:1.8.0_265]
当我包含log4j versions>2.9时,我也有类似的例外,因为它现在是一个“多版本jar”(请参阅),并且有
***/version/9/*.jar
文件,但删除log4j作为依赖项会删除这些文件


不过,我无法将新的Jackson LIB作为依赖项删除。

我当然可以从被记录中删除。这也有一种难闻的味道…多版本的.jar文件应该不会是问题。多版本文件的全部要点是,9+类文件在META-INF下,Java 9之前版本的类加载器不会看到这些文件。@VGR:“不应该”…:-)但事实上,它确实会导致类似上面的异常。另外,
module info.class
直接位于jar的根目录下,而不是在
META-INF
下。正确,不应该。我很难相信Java8类加载器会注意META-INF下的任何类文件。然而,module-info.class也需要在META-INF/version/9下。如果一个Jackson.jar把它的Java9+类放在META-INF/version下,而不是放在它的模块描述符下,那么Jackson就搞砸了。但当我将log4j作为依赖项时,Glassfish4也抱怨它的文件,尽管它们在
META-INF/version/9
下。所以glassfish4也做了一些“错误”的事情。我开始认为这是因为glassfish4在2013年发布,Java9在2017年发布。glassfish4在当时是有意义的,但现在不是了。。。