java Tomcat 7 注释扫描器和带有 -parameters 编译器标志异常的 JDK 8
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25279729/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Tomcat 7 Annotation scanner and JDK 8 with -parameters compiler flag exceptions
提问by Gerrit Brink
I am compiling my classfiles with JDK 8 with the -parameters flag which preserves the parameter names and makes them available via reflection. Tomcat 7 seems to have issues with my class files.
我正在使用带有 -parameters 标志的 JDK 8 编译我的类文件,该标志保留参数名称并通过反射使它们可用。Tomcat 7 似乎对我的类文件有问题。
Aug 13, 2014 8:31:32 AM org.apache.catalina.startup.ContextConfig processAnnotationsFile
SEVERE: Unable to process file [/home/rex/apache-tomcat-7.0.54/webapps/ROOT/WEB-INF/classes/mod/test/TestData.class] for annotations
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at org.apache.tomcat.util.bcel.classfile.Utility.swallowMethodParameters(Utility.java:797)
at org.apache.tomcat.util.bcel.classfile.Attribute.readAttribute(Attribute.java:171)
at org.apache.tomcat.util.bcel.classfile.FieldOrMethod.<init>(FieldOrMethod.java:57)
at org.apache.tomcat.util.bcel.classfile.Method.<init>(Method.java:71)
at org.apache.tomcat.util.bcel.classfile.ClassParser.readMethods(ClassParser.java:267)
at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:127)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2058)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2033)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2026)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2026)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1291)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:876)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:374)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
I am using Tomcat 7.0.54 and JDK 8u5 x64 Any assistance will be much appreciated :)
我正在使用 Tomcat 7.0.54 和 JDK 8u5 x64 任何帮助将不胜感激:)
回答by Gerrit Brink
Confirmed to be fixed in Tomcat 7.0.56
已确认在 Tomcat 7.0.56 中修复
See changelog for Tomcat 7.0.56 http://tomcat.apache.org/tomcat-7.0-doc/changelog.html
请参阅 Tomcat 7.0.56 http://tomcat.apache.org/tomcat-7.0-doc/changelog.html 的变更日志
Also tested this locally and it fixed my problems
也在本地进行了测试,它解决了我的问题
回答by Faycel Abidi
I have got the same problem and I resolved it without upgrading tomcat version as the following:
我遇到了同样的问题,我在没有升级 tomcat 版本的情况下解决了它,如下所示:
Changing the jaassist version ( i used the version 3.20.0-GA and i changed it to 3.18.1-GA)
adding some args to maven compiler plugin
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${plugin.compiler.version}</version> <configuration> <source>${project.build.javaVersion}</source> <target>${project.build.javaVersion}</target> <forceJavacCompilerUse>true</forceJavacCompilerUse> <fork>true</fork> <compilerArgument>-proc:none</compilerArgument> </configuration> </plugin>
adding the tag metadata-complete="true" to the web.xml
更改 jaassist 版本(我使用了 3.20.0-GA 版本,然后将其更改为 3.18.1-GA)
向 Maven 编译器插件添加一些参数
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${plugin.compiler.version}</version> <configuration> <source>${project.build.javaVersion}</source> <target>${project.build.javaVersion}</target> <forceJavacCompilerUse>true</forceJavacCompilerUse> <fork>true</fork> <compilerArgument>-proc:none</compilerArgument> </configuration> </plugin>
将标签 metadata-complete="true" 添加到 web.xml
回答by rmuller
That is correct, you have to disableannotation processing, see this question org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15for more information.
没错,您必须禁用注释处理,请参阅此问题org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15了解更多信息。