使用jdk 1.8.0_51 source = 1.7,target = 1.7 Junit 4.6,ant 1.8.0
发生了什么事? 所有通过1.7的测试现在都失败了。 我需要知道以下内容:
我们有构建,部署和测试的目标
构建和部署工作没有问题,但Junit测试在所有模块中都失败了。
我尝试升级ant(1.8.9),junit 4.10
这可能是因为任何没有用java 1.8编译的jar吗?
我应该确保我使用的所有罐子都是用java8编译的吗?如果是,那可能是一个坏兆头:(
我尝试通过命令提示符运行junit并且它有效。
java -cp ./target/package-test:./target/mycompany-common.jar:./lib/junit-4.6.jar org.junit.runner.JUnitCore com.mycompany.JunitTest
===================================================================================== Tests: 1 Batches: 1 Threads: 1 Host: remote ===================================================================================== TEST RUN FAIL ERR SKIP DURATION JunitTest 1 1 0.068 sec ------------------------------------------------------------------------------------- TOTAL 1 1 ===================================================================================== The following tests had failures or errors: com.mycompany.JunitTest The failures and errors can be seen in the following files: /target/reports/junit/TEST-com.mycompany.JunitTest.txt Results of first failed test: Testsuite: com.mycompany.JunitTest Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.068 sec Testcase: test took 0.018 sec Caused an ERROR Expecting a stackmap frame at branch target 65 Exception Details: Location: com/mycompany/Identifier.equals(Ljava/lang/Object;)Z @26: ifne Reason: Expected stackmap frame at this location. Bytecode: 0x0000000: 033d 11ff ff3e 1215 1100 35b8 001b 2bc1 0x0000010: 0002 1100 353d 1100 003e 9a00 271c 1100 0x0000020: 35a0 0016 1d11 0000 a000 0f12 151c 1d04 0x0000030: b800 4111 ffff 3e12 1511 0036 b800 1b03 0x0000040: ac1d 9b00 0f12 151c 1d03 b800 4111 ffff 0x0000050: 3e12 1511 0039 b800 1b2b c000 023a 0412 0x0000060: 1511 003a b800 1b2a b400 2619 04b4 0026 0x0000070: b600 43ac Stackmap Table: same_frame_extended(@89) java.lang.VerifyError: Expecting a stackmap frame at branch target 65 Exception Details: Location: com/mycompany/Identifier.equals(Ljava/lang/Object;)Z @26: ifne Reason: Expected stackmap frame at this location. Bytecode: 0x0000000: 033d 11ff ff3e 1215 1100 35b8 001b 2bc1 0x0000010: 0002 1100 353d 1100 003e 9a00 271c 1100 0x0000020: 35a0 0016 1d11 0000 a000 0f12 151c 1d04 0x0000030: b800 4111 ffff 3e12 1511 0036 b800 1b03 0x0000040: ac1d 9b00 0f12 151c 1d03 b800 4111 ffff 0x0000050: 3e12 1511 0039 b800 1b2b c000 023a 0412 0x0000060: 1511 003a b800 1b2a b400 2619 04b4 0026 0x0000070: b600 43ac Stackmap Table: same_frame_extended(@89) at com.mycompany.JunitTest.test(JunitTest.java:17)
答案 0 :(得分:1)
从Java 8开始,没有--usesplitverifier的等价物。
您可以使用'-noverify'来阻止java 8在严格的字节码实现模式下编译代码。
如果使用Eclipse,您还可以执行windows-> preferences->编译器 - >取消选中“保留未使用的局部变量”选项
答案 1 :(得分:0)
在将我的应用程序从1.6迁移到1.7时,我也面临同样的挑战,但我能够解决它。
方法1:您可以使用-XX:-UseSplitVerifier
参数来解决此问题,而无需担心升级库文件。
方法2:我按照以下步骤解决了问题:
找出导致问题的图书馆并将其逮捕,这是一个缓慢而痛苦的过程。
答案 2 :(得分:0)
从Java 1.7升级到1.8时,我遇到了类似的问题。我得到了"期望在分支目标12"处的堆栈图框架。运行Parasoft Jtest单元测试用例时出错。 通过将[-noverify] VM参数添加到Eclipse中的JRE定义来解决该问题。