Groovy에서 java.lang.VerifyError가 발생했을 때의 해결 방법
이번은 그 해결 방법입니다.
tl;dr
코드 레벨에서 차이가 없으면 컴파일러를 의심합니다.
오류 내용
./gradlew server
(略)
Jenkins home directory: /Users/sueyoshi_go/workspace/github.com/jenkinsci/yaml-axis-plugin/work found at: System.getProperty("JENKINS_HOME")
Failed to instantiate Key[type=org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl, annotation=[none]]; skipping this component
com.google.inject.ProvisionException: Guice provision errors:
1) Error injecting constructor, java.lang.VerifyError: (class: org/jenkinsci/plugins/yamlaxis/YamlAxis, method: super$1$forEach signature: (Ljava/util/function/Consumer;)V) Illegal use of nonvirtual function call
at org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl.<init>(YamlAxis.groovy:80)
1 error
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:52)
at com.google.inject.Scopes$1$1.get(Scopes.java:65)
at hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1.get(ExtensionFinder.java:427)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.internal.InjectorImpl$3$1.call(InjectorImpl.java:1005)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1051)
at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:1001)
at hudson.ExtensionFinder$GuiceFinder._find(ExtensionFinder.java:389)
at hudson.ExtensionFinder$GuiceFinder.find(ExtensionFinder.java:380)
at hudson.ClassicPluginStrategy.findComponents(ClassicPluginStrategy.java:386)
at hudson.ExtensionList.load(ExtensionList.java:300)
at hudson.ExtensionList.ensureLoaded(ExtensionList.java:253)
at hudson.ExtensionList.getComponents(ExtensionList.java:154)
at hudson.DescriptorExtensionList.load(DescriptorExtensionList.java:182)
at hudson.ExtensionList.ensureLoaded(ExtensionList.java:253)
at hudson.ExtensionList.iterator(ExtensionList.java:143)
at hudson.model.ComputerSet.<clinit>(ComputerSet.java:441)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:106)
at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:176)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)
at jenkins.model.Jenkins$7.runTask(Jenkins.java:904)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
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:745)
Caused by: java.lang.VerifyError: (class: org/jenkinsci/plugins/yamlaxis/YamlAxis, method: super$1$forEach signature: (Ljava/util/function/Consumer;)V) Illegal use of nonvirtual function call
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at hudson.model.Descriptor.<init>(Descriptor.java:284)
at hudson.matrix.AxisDescriptor.<init>(AxisDescriptor.java:43)
at org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl.<init>(YamlAxis.groovy)
at org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl$$FastClassByGuice$$9a80bc2f.newInstance(<generated>)
at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:108)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:88)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:269)
at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1058)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
... 29 more
오류 부분
조사
버전 간의 차이를 봐도 어디가 나쁜지 모르겠다. . . (0.1.0이 정상적으로 움직이던 버전에서 0.1.1이 오류가 된 버전)
겨우 제대로 동작하고 있던 버전의 tag를 checkout해도 같은 에러가 발생.
"코드 레벨에서 차이가 없다면 컴파일러가 나쁘지 않습니까?"라고 조사하면 빙고였습니다.
사용한 JDK 버전
v0.1.0(성공적으로 실행된 버전)을 빌드한 JDK
$ java -v
openjdk version "1.7.0-u10-b09"
OpenJDK Runtime Environment (build 1.7.0-u10-b09-20121015)
OpenJDK 64-Bit Server VM (build 23.6-b03, mixed mode)
v0.1.1(오류가 발생한 버전)을 빌드한 JDK
$ java -v
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
덧붙여서 왜 v0.1.0과 v0.1.1에서 JDK의 버전이 다른가 하면 플러그인 개발을 위해 로컬로 Jenkins를 움직이는 것이 무겁기 때문에 도중부터 스펙이 높은 PC(JDK 8)를 사용하게 했기 때문입니다
최종적으로는 v0.1.0을 빌드한 것과 같은 PC(JDK 7)로 빌드 다시 동작 확인하면 에러가 나오지 않게 되어 있는 것을 확인할 수 있었으므로 릴리스했습니다.
교훈
단위 테스트가 녹색이라면 작동을 확인하지 않고 출시해서는 안됩니다.
추가
Groovy에서 JDK 8 지원되는 것은 2.3에서였습니다.
1
Jenkins와의 합의로 Groovy의 버전은 1.8.9에 고정하고 있기 때문에 The Groovy programming language - Groovy 2.3 release notes , JDK 8이라고 올바르게 빌드할 수 없다는 것은 있을 것 같다.
은근히 쓰고 있지만 컴파일러에 도착하는 데 밤새 걸립니다. 2
↩ 참조 Groovy와 Gradle에서 Jenkins 플러그인 만들기 - Qiita
Reference
이 문제에 관하여(Groovy에서 java.lang.VerifyError가 발생했을 때의 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sue445/items/c76a98f428f4a2d39f96
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
./gradlew server
(略)
Jenkins home directory: /Users/sueyoshi_go/workspace/github.com/jenkinsci/yaml-axis-plugin/work found at: System.getProperty("JENKINS_HOME")
Failed to instantiate Key[type=org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl, annotation=[none]]; skipping this component
com.google.inject.ProvisionException: Guice provision errors:
1) Error injecting constructor, java.lang.VerifyError: (class: org/jenkinsci/plugins/yamlaxis/YamlAxis, method: super$1$forEach signature: (Ljava/util/function/Consumer;)V) Illegal use of nonvirtual function call
at org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl.<init>(YamlAxis.groovy:80)
1 error
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:52)
at com.google.inject.Scopes$1$1.get(Scopes.java:65)
at hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1.get(ExtensionFinder.java:427)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.internal.InjectorImpl$3$1.call(InjectorImpl.java:1005)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1051)
at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:1001)
at hudson.ExtensionFinder$GuiceFinder._find(ExtensionFinder.java:389)
at hudson.ExtensionFinder$GuiceFinder.find(ExtensionFinder.java:380)
at hudson.ClassicPluginStrategy.findComponents(ClassicPluginStrategy.java:386)
at hudson.ExtensionList.load(ExtensionList.java:300)
at hudson.ExtensionList.ensureLoaded(ExtensionList.java:253)
at hudson.ExtensionList.getComponents(ExtensionList.java:154)
at hudson.DescriptorExtensionList.load(DescriptorExtensionList.java:182)
at hudson.ExtensionList.ensureLoaded(ExtensionList.java:253)
at hudson.ExtensionList.iterator(ExtensionList.java:143)
at hudson.model.ComputerSet.<clinit>(ComputerSet.java:441)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:106)
at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:176)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)
at jenkins.model.Jenkins$7.runTask(Jenkins.java:904)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
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:745)
Caused by: java.lang.VerifyError: (class: org/jenkinsci/plugins/yamlaxis/YamlAxis, method: super$1$forEach signature: (Ljava/util/function/Consumer;)V) Illegal use of nonvirtual function call
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at hudson.model.Descriptor.<init>(Descriptor.java:284)
at hudson.matrix.AxisDescriptor.<init>(AxisDescriptor.java:43)
at org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl.<init>(YamlAxis.groovy)
at org.jenkinsci.plugins.yamlaxis.YamlAxis$DescriptorImpl$$FastClassByGuice$$9a80bc2f.newInstance(<generated>)
at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:108)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:88)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:269)
at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1058)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
... 29 more
오류 부분
조사
버전 간의 차이를 봐도 어디가 나쁜지 모르겠다. . . (0.1.0이 정상적으로 움직이던 버전에서 0.1.1이 오류가 된 버전)
겨우 제대로 동작하고 있던 버전의 tag를 checkout해도 같은 에러가 발생.
"코드 레벨에서 차이가 없다면 컴파일러가 나쁘지 않습니까?"라고 조사하면 빙고였습니다.
사용한 JDK 버전
v0.1.0(성공적으로 실행된 버전)을 빌드한 JDK
$ java -v
openjdk version "1.7.0-u10-b09"
OpenJDK Runtime Environment (build 1.7.0-u10-b09-20121015)
OpenJDK 64-Bit Server VM (build 23.6-b03, mixed mode)
v0.1.1(오류가 발생한 버전)을 빌드한 JDK
$ java -v
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
덧붙여서 왜 v0.1.0과 v0.1.1에서 JDK의 버전이 다른가 하면 플러그인 개발을 위해 로컬로 Jenkins를 움직이는 것이 무겁기 때문에 도중부터 스펙이 높은 PC(JDK 8)를 사용하게 했기 때문입니다
최종적으로는 v0.1.0을 빌드한 것과 같은 PC(JDK 7)로 빌드 다시 동작 확인하면 에러가 나오지 않게 되어 있는 것을 확인할 수 있었으므로 릴리스했습니다.
교훈
단위 테스트가 녹색이라면 작동을 확인하지 않고 출시해서는 안됩니다.
추가
Groovy에서 JDK 8 지원되는 것은 2.3에서였습니다.
1
Jenkins와의 합의로 Groovy의 버전은 1.8.9에 고정하고 있기 때문에 The Groovy programming language - Groovy 2.3 release notes , JDK 8이라고 올바르게 빌드할 수 없다는 것은 있을 것 같다.
은근히 쓰고 있지만 컴파일러에 도착하는 데 밤새 걸립니다. 2
↩ 참조 Groovy와 Gradle에서 Jenkins 플러그인 만들기 - Qiita
Reference
이 문제에 관하여(Groovy에서 java.lang.VerifyError가 발생했을 때의 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sue445/items/c76a98f428f4a2d39f96
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
v0.1.0(성공적으로 실행된 버전)을 빌드한 JDK
$ java -v
openjdk version "1.7.0-u10-b09"
OpenJDK Runtime Environment (build 1.7.0-u10-b09-20121015)
OpenJDK 64-Bit Server VM (build 23.6-b03, mixed mode)
v0.1.1(오류가 발생한 버전)을 빌드한 JDK
$ java -v
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
덧붙여서 왜 v0.1.0과 v0.1.1에서 JDK의 버전이 다른가 하면 플러그인 개발을 위해 로컬로 Jenkins를 움직이는 것이 무겁기 때문에 도중부터 스펙이 높은 PC(JDK 8)를 사용하게 했기 때문입니다
최종적으로는 v0.1.0을 빌드한 것과 같은 PC(JDK 7)로 빌드 다시 동작 확인하면 에러가 나오지 않게 되어 있는 것을 확인할 수 있었으므로 릴리스했습니다.
교훈
단위 테스트가 녹색이라면 작동을 확인하지 않고 출시해서는 안됩니다.
추가
Groovy에서 JDK 8 지원되는 것은 2.3에서였습니다.
1
Jenkins와의 합의로 Groovy의 버전은 1.8.9에 고정하고 있기 때문에 The Groovy programming language - Groovy 2.3 release notes , JDK 8이라고 올바르게 빌드할 수 없다는 것은 있을 것 같다.
은근히 쓰고 있지만 컴파일러에 도착하는 데 밤새 걸립니다. 2
↩ 참조 Groovy와 Gradle에서 Jenkins 플러그인 만들기 - Qiita
Reference
이 문제에 관하여(Groovy에서 java.lang.VerifyError가 발생했을 때의 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sue445/items/c76a98f428f4a2d39f96
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Groovy에서 JDK 8 지원되는 것은 2.3에서였습니다.
1
Jenkins와의 합의로 Groovy의 버전은 1.8.9에 고정하고 있기 때문에 The Groovy programming language - Groovy 2.3 release notes , JDK 8이라고 올바르게 빌드할 수 없다는 것은 있을 것 같다.
은근히 쓰고 있지만 컴파일러에 도착하는 데 밤새 걸립니다. 2
↩ 참조 Groovy와 Gradle에서 Jenkins 플러그인 만들기 - Qiita
Reference
이 문제에 관하여(Groovy에서 java.lang.VerifyError가 발생했을 때의 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sue445/items/c76a98f428f4a2d39f96텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)