Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-19383

Bytecode compatibility transformer mistakenly corrupts org.apache.ivy.core.settings.IvySettings.triggers

      On two separate Jenkins servers, I'm unable to start Jenkins with the following error,

      org.jvnet.hudson.reactor.ReactorException: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
      	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:246)
      	at jenkins.InitReactorRunner.run(InitReactorRunner.java:43)
      	at jenkins.model.Jenkins.executeReactor(Jenkins.java:906)
      	at jenkins.model.Jenkins.<init>(Jenkins.java:806)
      	at hudson.model.Hudson.<init>(Hudson.java:81)
      	at hudson.model.Hudson.<init>(Hudson.java:77)
      	at hudson.WebAppMain$3.run(WebAppMain.java:221)
      Caused by: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
      	at hudson.ivy.IvyBuildTrigger.getIvy(IvyBuildTrigger.java:234)
      	at hudson.ivy.IvyBuildTrigger.recomputeModuleDescriptor(IvyBuildTrigger.java:337)
      	at hudson.ivy.IvyBuildTrigger.getModuleDescriptor(IvyBuildTrigger.java:264)
      	at hudson.ivy.IvyBuildTrigger.buildDependencyGraph(IvyBuildTrigger.java:446)
      	at hudson.util.DescribableList.buildDependencyGraph(DescribableList.java:213)
      	at hudson.model.Project.buildDependencyGraph(Project.java:179)
      	at hudson.model.DependencyGraph.build(DependencyGraph.java:95)
      	at jenkins.model.Jenkins.rebuildDependencyGraph(Jenkins.java:3598)
      	at jenkins.model.Jenkins$20.run(Jenkins.java:2577)
      	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
      	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
      	at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
      	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
      	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at java.lang.Thread.run(Unknown Source)
      

      I tried different versions, and I see this error with 1.527, 1.528, and 1.529. I've rolled back to 1.526 which is working.

      Let me know if I can provide any additional information. Thanks!

      Update:
      I should also clarify that I'm using free-style projects with "Trigger the build of other projects based on the Ivy dependency management system" post-build action.

      I installed another Jenkins system to debug this issue. On this fresh system, Jenkins started successfully. However, after each build, the verify error showed up in jenkins.err.log,

      Sep 04, 2013 9:10:47 AM SEVERE hudson.model.Executor run
      Executor threw an exception
      java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;) Illegal type in constant pool
      	at hudson.ivy.IvyBuildTrigger.getIvy(IvyBuildTrigger.java:234)
      	at hudson.ivy.IvyBuildTrigger.recomputeModuleDescriptor(IvyBuildTrigger.java:337)
      	at hudson.ivy.IvyBuildTrigger.perform(IvyBuildTrigger.java:418)
      	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
      	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:804)
      	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:776)
      	at hudson.model.Build$BuildExecution.cleanUp(Build.java:192)
      	at hudson.model.Run.execute(Run.java:1648)
      	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
      	at hudson.model.ResourceController.execute(ResourceController.java:88)
      	at hudson.model.Executor.run(Executor.java:247)
      

      I turned on -verbose:class, and it looks like the right jar is being used,

      [Loaded org.apache.ivy.core.sort.SortEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.plugins.parser.ParserSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.publish.PublishEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.deliver.DeliverEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.check.CheckEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.install.InstallEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.plugins.resolver.ResolverSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.resolve.ResolveEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.retrieve.RetrieveEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.repository.RepositoryManagementEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.settings.IvySettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.RelativeUrlResolver from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.NormalRelativeUrlResolver from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.cache.RepositoryCacheManager from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.plugins.lock.LockStrategy from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.util.filter.Filter from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.plugins.conflict.ConflictManager from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.plugins.latest.LatestStrategy from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded org.apache.ivy.core.cache.ResolutionCacheManager from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
      [Loaded java.lang.VerifyError from C:\Java\jdk1.6.0_30_x64\jre\lib\rt.jar]
      

      Also verified that the ivy-2.3.0.jar matched a freshly downloaded copy from apache.

      Stepped through in a debugger. Sadly, there's not much additional information on a VerifyError. In an expression, I was able to resolve other classes in the ivy jar but not IvySettings.

      Searching around the web, VerifyError can be frustrating to deal with. There is Good tools for debugging VerifyError? on StackOverflow. I tried using ASM as suggested in an answer, and no errors were reported. I haven't tried Krakatau yet.

      I noticed that the fresh install of Jenkins 1.529 came with Java 1.7u25. I tried running with Java 1.6(u30) and ran into the same verify error.

          [JENKINS-19383] Bytecode compatibility transformer mistakenly corrupts org.apache.ivy.core.settings.IvySettings.triggers

          John McCarthy created issue -
          John McCarthy made changes -
          Description Original: On two separate Jenkins servers, I'm unable to start Jenkins with the following error,

          org.jvnet.hudson.reactor.ReactorException: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;) Illegal type in constant pool
          at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:246)
          at jenkins.InitReactorRunner.run(InitReactorRunner.java:43)
          at jenkins.model.Jenkins.executeReactor(Jenkins.java:906)
          at jenkins.model.Jenkins.<init>(Jenkins.java:806)
          at hudson.model.Hudson.<init>(Hudson.java:81)
          at hudson.model.Hudson.<init>(Hudson.java:77)
          at hudson.WebAppMain$3.run(WebAppMain.java:221)
          Caused by: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;) Illegal type in constant pool
          at hudson.ivy.IvyBuildTrigger.getIvy(IvyBuildTrigger.java:234)
          at hudson.ivy.IvyBuildTrigger.recomputeModuleDescriptor(IvyBuildTrigger.java:337)
          at hudson.ivy.IvyBuildTrigger.getModuleDescriptor(IvyBuildTrigger.java:264)
          at hudson.ivy.IvyBuildTrigger.buildDependencyGraph(IvyBuildTrigger.java:446)
          at hudson.util.DescribableList.buildDependencyGraph(DescribableList.java:213)
          at hudson.model.Project.buildDependencyGraph(Project.java:179)
          at hudson.model.DependencyGraph.build(DependencyGraph.java:95)
          at jenkins.model.Jenkins.rebuildDependencyGraph(Jenkins.java:3598)
          at jenkins.model.Jenkins$20.run(Jenkins.java:2577)
          at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
          at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
          at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
          at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
          at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
          at java.lang.Thread.run(Unknown Source)

          I tried different versions, and I see this error with 1.527, 1.528, and 1.529. I've rolled back to 1.526 which is working.

          Let me know if I can provide any additional information. Thanks!
          New: On two separate Jenkins servers, I'm unable to start Jenkins with the following error,

          org.jvnet.hudson.reactor.ReactorException: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
          at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:246)
          at jenkins.InitReactorRunner.run(InitReactorRunner.java:43)
          at jenkins.model.Jenkins.executeReactor(Jenkins.java:906)
          at jenkins.model.Jenkins.<init>(Jenkins.java:806)
          at hudson.model.Hudson.<init>(Hudson.java:81)
          at hudson.model.Hudson.<init>(Hudson.java:77)
          at hudson.WebAppMain$3.run(WebAppMain.java:221)
          Caused by: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
          at hudson.ivy.IvyBuildTrigger.getIvy(IvyBuildTrigger.java:234)
          at hudson.ivy.IvyBuildTrigger.recomputeModuleDescriptor(IvyBuildTrigger.java:337)
          at hudson.ivy.IvyBuildTrigger.getModuleDescriptor(IvyBuildTrigger.java:264)
          at hudson.ivy.IvyBuildTrigger.buildDependencyGraph(IvyBuildTrigger.java:446)
          at hudson.util.DescribableList.buildDependencyGraph(DescribableList.java:213)
          at hudson.model.Project.buildDependencyGraph(Project.java:179)
          at hudson.model.DependencyGraph.build(DependencyGraph.java:95)
          at jenkins.model.Jenkins.rebuildDependencyGraph(Jenkins.java:3598)
          at jenkins.model.Jenkins$20.run(Jenkins.java:2577)
          at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
          at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
          at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
          at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
          at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
          at java.lang.Thread.run(Unknown Source)

          I tried different versions, and I see this error with 1.527, 1.528, and 1.529. I've rolled back to 1.526 which is working.

          Let me know if I can provide any additional information. Thanks!
          John McCarthy made changes -
          Description Original: On two separate Jenkins servers, I'm unable to start Jenkins with the following error,

          org.jvnet.hudson.reactor.ReactorException: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
          at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:246)
          at jenkins.InitReactorRunner.run(InitReactorRunner.java:43)
          at jenkins.model.Jenkins.executeReactor(Jenkins.java:906)
          at jenkins.model.Jenkins.<init>(Jenkins.java:806)
          at hudson.model.Hudson.<init>(Hudson.java:81)
          at hudson.model.Hudson.<init>(Hudson.java:77)
          at hudson.WebAppMain$3.run(WebAppMain.java:221)
          Caused by: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
          at hudson.ivy.IvyBuildTrigger.getIvy(IvyBuildTrigger.java:234)
          at hudson.ivy.IvyBuildTrigger.recomputeModuleDescriptor(IvyBuildTrigger.java:337)
          at hudson.ivy.IvyBuildTrigger.getModuleDescriptor(IvyBuildTrigger.java:264)
          at hudson.ivy.IvyBuildTrigger.buildDependencyGraph(IvyBuildTrigger.java:446)
          at hudson.util.DescribableList.buildDependencyGraph(DescribableList.java:213)
          at hudson.model.Project.buildDependencyGraph(Project.java:179)
          at hudson.model.DependencyGraph.build(DependencyGraph.java:95)
          at jenkins.model.Jenkins.rebuildDependencyGraph(Jenkins.java:3598)
          at jenkins.model.Jenkins$20.run(Jenkins.java:2577)
          at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
          at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
          at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
          at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
          at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
          at java.lang.Thread.run(Unknown Source)

          I tried different versions, and I see this error with 1.527, 1.528, and 1.529. I've rolled back to 1.526 which is working.

          Let me know if I can provide any additional information. Thanks!
          New: On two separate Jenkins servers, I'm unable to start Jenkins with the following error,
          {noformat}
          org.jvnet.hudson.reactor.ReactorException: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
          at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:246)
          at jenkins.InitReactorRunner.run(InitReactorRunner.java:43)
          at jenkins.model.Jenkins.executeReactor(Jenkins.java:906)
          at jenkins.model.Jenkins.<init>(Jenkins.java:806)
          at hudson.model.Hudson.<init>(Hudson.java:81)
          at hudson.model.Hudson.<init>(Hudson.java:77)
          at hudson.WebAppMain$3.run(WebAppMain.java:221)
          Caused by: java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;\) Illegal type in constant pool
          at hudson.ivy.IvyBuildTrigger.getIvy(IvyBuildTrigger.java:234)
          at hudson.ivy.IvyBuildTrigger.recomputeModuleDescriptor(IvyBuildTrigger.java:337)
          at hudson.ivy.IvyBuildTrigger.getModuleDescriptor(IvyBuildTrigger.java:264)
          at hudson.ivy.IvyBuildTrigger.buildDependencyGraph(IvyBuildTrigger.java:446)
          at hudson.util.DescribableList.buildDependencyGraph(DescribableList.java:213)
          at hudson.model.Project.buildDependencyGraph(Project.java:179)
          at hudson.model.DependencyGraph.build(DependencyGraph.java:95)
          at jenkins.model.Jenkins.rebuildDependencyGraph(Jenkins.java:3598)
          at jenkins.model.Jenkins$20.run(Jenkins.java:2577)
          at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
          at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
          at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
          at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
          at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
          at java.lang.Thread.run(Unknown Source)
          {noformat}

          I tried different versions, and I see this error with 1.527, 1.528, and 1.529. I've rolled back to 1.526 which is working.

          Let me know if I can provide any additional information. Thanks!

          *Update:*
          I should also clarify that I'm using free-style projects with "Trigger the build of other projects based on the Ivy dependency management system" post-build action.

          I installed another Jenkins system to debug this issue. On this fresh system, Jenkins started successfully. However, after each build, the verify error showed up in {{jenkins.err.log}},
          {noformat}
          Sep 04, 2013 9:10:47 AM SEVERE hudson.model.Executor run
          Executor threw an exception
          java.lang.VerifyError: (class: org/apache/ivy/core/settings/IvySettings, method: getTriggers signature: ()Ljava/util/List;) Illegal type in constant pool
          at hudson.ivy.IvyBuildTrigger.getIvy(IvyBuildTrigger.java:234)
          at hudson.ivy.IvyBuildTrigger.recomputeModuleDescriptor(IvyBuildTrigger.java:337)
          at hudson.ivy.IvyBuildTrigger.perform(IvyBuildTrigger.java:418)
          at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
          at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:804)
          at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:776)
          at hudson.model.Build$BuildExecution.cleanUp(Build.java:192)
          at hudson.model.Run.execute(Run.java:1648)
          at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
          at hudson.model.ResourceController.execute(ResourceController.java:88)
          at hudson.model.Executor.run(Executor.java:247)
          {noformat}

          I turned on {{-verbose:class}}, and it looks like the right jar is being used,
          {noformat}
          [Loaded org.apache.ivy.core.sort.SortEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.plugins.parser.ParserSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.publish.PublishEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.deliver.DeliverEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.check.CheckEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.install.InstallEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.plugins.resolver.ResolverSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.resolve.ResolveEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.retrieve.RetrieveEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.repository.RepositoryManagementEngineSettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.settings.IvySettings from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.RelativeUrlResolver from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.NormalRelativeUrlResolver from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.cache.RepositoryCacheManager from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.plugins.lock.LockStrategy from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.util.filter.Filter from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.plugins.conflict.ConflictManager from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.plugins.latest.LatestStrategy from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded org.apache.ivy.core.cache.ResolutionCacheManager from file:/C:/Program%20Files%20(x86)/Jenkins/plugins/ivy/WEB-INF/lib/ivy-2.3.0.jar]
          [Loaded java.lang.VerifyError from C:\Java\jdk1.6.0_30_x64\jre\lib\rt.jar]
          {noformat}

          Also verified that the {{ivy-2.3.0.jar}} matched a freshly downloaded copy from apache.

          Stepped through in a debugger. Sadly, there's not much additional information on a {{VerifyError}}. In an expression, I was able to resolve other classes in the ivy jar but not {{IvySettings}}.

          Searching around the web, {{VerifyError}} can be frustrating to deal with. There is [_Good tools for debugging VerifyError?_|http://stackoverflow.com/questions/9972439/good-tools-for-debugging-verifyerror] on StackOverflow. I tried using ASM as suggested in an answer, and no errors were reported. I haven't tried Krakatau yet.

          I noticed that the fresh install of Jenkins 1.529 came with Java 1.7u25. I tried running with Java 1.6(u30) and ran into the same verify error.

          John McCarthy added a comment -

          Continuing to look into this, I'm leery of this change introduced in Jenkins 1.527: "Added bytecode transformation driven compatibility ensurance mechanism". I started seeing this issue in 1.527. Looking at the linked discussion, the author discusses changing AbstractProject.triggers. Perhaps the bytecode transformer accidentally targeted the same method name in the ivy library. I'll start digging in that direction.

          John McCarthy added a comment - Continuing to look into this, I'm leery of this change introduced in Jenkins 1.527: "Added bytecode transformation driven compatibility ensurance mechanism". I started seeing this issue in 1.527. Looking at the linked discussion , the author discusses changing AbstractProject.triggers . Perhaps the bytecode transformer accidentally targeted the same method name in the ivy library. I'll start digging in that direction.

          John McCarthy added a comment - - edited

          From playing with a debugger, I have confirmed that IvySettings gets past the initial check of spec.mayNeedTransformation(byte[]) in org.jenkinsci.bytecode.Transformer.transform(String, byte[]). Using the eclipse debugger, I was able to use force return to return from transform without modifying the class. After doing this, I did not get the VerifyError in the error log.

          I believe the ivy plugin is being impacted by the jenkins bytecode-compatibility-transformer.

          I'm in over my head when it comes to bytecode manipulation. Should this defect be reassigned? It no longer seems like an ivy plugin issue.

          I'll look into the Jenkins core source to see how the transformer's AdaptField is used. It seems like it's targeting a method name without a specific class in this instance. Perhaps the fix is to target a specific class as well. I suppose a class exception list could be created as well, but such a list would be difficult to maintain.

          John McCarthy added a comment - - edited From playing with a debugger, I have confirmed that IvySettings gets past the initial check of spec.mayNeedTransformation(byte[]) in org.jenkinsci.bytecode.Transformer.transform(String, byte[]) . Using the eclipse debugger, I was able to use force return to return from transform without modifying the class. After doing this, I did not get the VerifyError in the error log. I believe the ivy plugin is being impacted by the jenkins bytecode-compatibility-transformer . I'm in over my head when it comes to bytecode manipulation. Should this defect be reassigned? It no longer seems like an ivy plugin issue. I'll look into the Jenkins core source to see how the transformer's AdaptField is used. It seems like it's targeting a method name without a specific class in this instance. Perhaps the fix is to target a specific class as well. I suppose a class exception list could be created as well, but such a list would be difficult to maintain.

          John McCarthy added a comment -

          More details: the bytecode transform appears to only store field name and type. In this case, @AdaptField is used on AbstractProject.triggers,

              @AdaptField(was=List.class)
              protected volatile DescribableList<Trigger<?>,TriggerDescriptor> triggers = new DescribableList<Trigger<?>,TriggerDescriptor>(this);
          

          IvySettings has a field with the same name and the 'was' type of List,

              private List triggers = new ArrayList(); 
          

          Because the bytecode transformer does not store the target class (in NameAndType), any field called triggers with type List is transformed into a DescribableList. The VerifyError comes because IvySettings.getTriggers() expects the original type, List.

          John McCarthy added a comment - More details: the bytecode transform appears to only store field name and type. In this case, @AdaptField is used on AbstractProject.triggers , @AdaptField(was=List.class) protected volatile DescribableList<Trigger<?>,TriggerDescriptor> triggers = new DescribableList<Trigger<?>,TriggerDescriptor>( this ); IvySettings has a field with the same name and the 'was' type of List , private List triggers = new ArrayList(); Because the bytecode transformer does not store the target class (in NameAndType ), any field called triggers with type List is transformed into a DescribableList . The VerifyError comes because IvySettings.getTriggers() expects the original type, List .
          John McCarthy made changes -
          Labels Original: ivy startup New: bytecode-compatibility-transformer ivy startup

          John McCarthy added a comment -

          Attempted a fix on github,
          https://github.com/jvmccarthy/bytecode-compatibility-transformer/tree/JENKINS-19383
          Plumbing through class name with field and method. I couldn't get CompatabilityTest to pass with or without these changes, otherwise I would submit a pull request. I ran execution tests on these changes, and the transformer is no longer interfering with IvySettings. However, I wasn't able to verify an instance where AbstractProject was transformed.

          John McCarthy added a comment - Attempted a fix on github, https://github.com/jvmccarthy/bytecode-compatibility-transformer/tree/JENKINS-19383 Plumbing through class name with field and method. I couldn't get CompatabilityTest to pass with or without these changes, otherwise I would submit a pull request. I ran execution tests on these changes, and the transformer is no longer interfering with IvySettings . However, I wasn't able to verify an instance where AbstractProject was transformed.

          John McCarthy added a comment -

          Kohsuke,
          Greetings. I hope it's not too presumptuous to assign this issue to you, but I believe you are the right person to work on it. I came across what I thought was an ivy plugin issue, but I now believe the problem is in the bytecode-compatability-transformer. The transformer needs to be updated to reference the class where the AdapterField is used. Otherwise, other classes may accidentally get transformed. I created a rough draft of the changes I think need to be made. Please let me know if I can be of any further assistance. Thank you for all your work on Jenkins and in the Java community.

          John McCarthy added a comment - Kohsuke, Greetings. I hope it's not too presumptuous to assign this issue to you, but I believe you are the right person to work on it. I came across what I thought was an ivy plugin issue, but I now believe the problem is in the bytecode-compatability-transformer. The transformer needs to be updated to reference the class where the AdapterField is used. Otherwise, other classes may accidentally get transformed. I created a rough draft of the changes I think need to be made. Please let me know if I can be of any further assistance. Thank you for all your work on Jenkins and in the Java community.
          John McCarthy made changes -
          Assignee Original: Timothy Bingaman [ tbingaman ] New: Kohsuke Kawaguchi [ kohsuke ]

            kohsuke Kohsuke Kawaguchi
            jvmccarthy John McCarthy
            Votes:
            5 Vote for this issue
            Watchers:
            11 Start watching this issue

              Created:
              Updated:
              Resolved: