首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SBT和JDK8增量编译问题:"java.lang.VerifyError:坏局部变量类型“

SBT和JDK8增量编译问题:"java.lang.VerifyError:坏局部变量类型“
EN

Stack Overflow用户
提问于 2014-07-16 09:23:36
回答 1查看 753关注 0票数 0

我有一个Java项目,它正在JDK7下的SBT中构建。当我将JDK切换到JDK8 (SBT运行在JDK8下并以JDK8字节码为目标)时,当从SBT的增量编译器发出错误时,它似乎来自对一个已经编译的类的Class.getDeclaredMethods调用。注意,在这两种情况下,源代码都是1.7兼容的源代码。我对源代码没有做任何修改。

SBT版本0.13.5和JDK 1.8.0_05

我在下面复制堆栈跟踪。它是完全可复制的,但从几个角度来说是“奇怪的”。我提到这些,因为它们可能有助于调查这一问题。

  • 我已经创建了一个类,它在“冒犯”类上调用Class.forName,并调用getDeclaredMethods。这是可行的-- .class文件没有明显的问题。
  • 我猜想,由于SBT缓存的内部分析存在一些问题,某些命令序列可以工作:

示例1:

代码语言:javascript
复制
ptp-server> clean
ptp-server> compile //this will fail

示例2:

代码语言:javascript
复制
ptp-server> clean
ptp-server> compile //This will fail
ptp-server> compile //This then works

例3:

代码语言:javascript
复制
ptp-server> clean
ptp-server> compile //This will fail
ptp-server> clean
ptp-server> compile //This then works

下面是堆栈跟踪:

代码语言:javascript
复制
java.lang.VerifyError: Bad local variable type
Exception Details:
  Location:
    gsa/jerusalem/naming/ptp/PTPServerEodPositionHelper.fillResponse(Lgsa/jerusalem/protocol/ptp/PTPResponse;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lgsa/jerusalem/protocol/ptp/PTPCommand;Ljava/lang/String;)V @73: aload
  Reason:
    Type top (current frame, locals[7]) is not assignable to reference type
  Current Frame:
    bci: @73
    flags: { }
    locals: { 'gsa/jerusalem/naming/ptp/PTPServerEodPositionHelper', 'gsa/jerusalem/protocol/ptp/PTPResponse', 'java/lang/String', 'java/lang/String', 'java/lang/String', 'gsa/jerusalem/protocol/ptp/PTPCommand', 'java/lang/String', top, '[Ljava/lang/String;', 'java/lang/String', 'gsa/shared/datetime/XDate' }
stack: { 'java/util/logging/Logger', 'java/lang/String', '[Ljava/lang/Object;', '[Ljava/lang/Object;', integer }

...

at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2688)
    at java.lang.Class.getDeclaredMethods(Class.java:1962)
    at sbt.ClassToAPI$.structure(ClassToAPI.scala:72)
    at sbt.ClassToAPI$.x$2$lzycompute$1(ClassToAPI.scala:61)
    at sbt.ClassToAPI$.x$2$1(ClassToAPI.scala:61)
    at sbt.ClassToAPI$.instance$lzycompute$1(ClassToAPI.scala:61)
    at sbt.ClassToAPI$.sbt$ClassToAPI$$instance$1(ClassToAPI.scala:61)
    at sbt.ClassToAPI$$anonfun$5.apply(ClassToAPI.scala:62)
    at sbt.ClassToAPI$$anonfun$5.apply(ClassToAPI.scala:62)
    at xsbti.SafeLazy$Impl._t$lzycompute(SafeLazy.scala:18)
    at xsbti.SafeLazy$Impl._t(SafeLazy.scala:16)
    at xsbti.SafeLazy$Impl.get(SafeLazy.scala:22)
    at sbt.ClassToAPI$$anonfun$process$1.apply(ClassToAPI.scala:21)
    at sbt.ClassToAPI$$anonfun$process$1.apply(ClassToAPI.scala:21)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
    at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45)
    at sbt.ClassToAPI$.process(ClassToAPI.scala:21)
    at sbt.compiler.AggressiveCompile$$anonfun$3.sbt$compiler$AggressiveCompile$$anonfun$$readAPI$1(AggressiveCompile.scala:127)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileJava$1$2$$anonfun$apply$mcV$sp$2$$anonfun$apply$6.apply(AggressiveCompile.scala:135)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileJava$1$2$$anonfun$apply$mcV$sp$2$$anonfun$apply$6.apply(AggressiveCompile.scala:135)
    at sbt.classfile.Analyze$$anonfun$apply$9.apply(Analyze.scala:42)
    at sbt.classfile.Analyze$$anonfun$apply$9.apply(Analyze.scala:41)
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98)
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98)
    at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:226)
    at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:39)
    at scala.collection.mutable.HashMap.foreach(HashMap.scala:98)
    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
    at sbt.classfile.Analyze$.apply(Analyze.scala:41)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileJava$1$2$$anonfun$apply$mcV$sp$2.apply(AggressiveCompile.scala:135)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileJava$1$2$$anonfun$apply$mcV$sp$2.apply(AggressiveCompile.scala:133)
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileJava$1$2.apply$mcV$sp(AggressiveCompile.scala:133)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileJava$1$2.apply(AggressiveCompile.scala:133)
    at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileJava$1$2.apply(AggressiveCompile.scala:133)
    at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:162)
    at sbt.compiler.AggressiveCompile$$anonfun$3.compileJava$1(AggressiveCompile.scala:132)
    at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:139)
    at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:86)
    at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:38)
    at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:36)
    at sbt.inc.IncrementalCommon.cycle(IncrementalCommon.scala:31)
    at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:39)
    at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:38)
    at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:66)
    at sbt.inc.Incremental$.compile(Incremental.scala:38)
    at sbt.inc.IncrementalCompile$.apply(Compile.scala:26)
    at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:153)
    at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:70)
    at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:45)
    at sbt.Compiler$.apply(Compiler.scala:74)
    at sbt.Compiler$.apply(Compiler.scala:65)
    at sbt.Defaults$.sbt$Defaults$$compileTaskImpl(Defaults.scala:773)
    at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:765)
    at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:765)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:235)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    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)
EN

回答 1

Stack Overflow用户

发布于 2017-01-09 15:47:34

也许,你的文件是用BOM头的UTF-8编码的.放下BOM,然后重试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24777012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档