# Java.lang.ClassFormatError: Duplicate method name&signature in custom task's class file after upgrading to Gradle 1.3

**URL:** <https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530>\
**Category:** Old Forum Archive\
**Created:** [January 24, 2013, 2:18pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530 "2013-01-24T14:18:00Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [January 24, 2013, 2:18pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/1 "2013-01-24T14:18:00Z")

</div>

Hi there,

I’m a bit late to the party this time 😉 But I’m currently upgrading our project builds to Gradle 1.3.

I’m having issues with one of our tasks. I didn’t change its code between 1.1 and 1.3 and it compiles fine under all three versions. However, when I reference it in a build file as simple as this one:

```gradle
buildscript {
    repositories {
        mavenRepo name: "universe", url: "http://companyRepoServer/"
    }
      dependencies {
        classpath (
            [group: 'com.mycompany', name: 'my-tasks', version: 'SNAPSHOT']
        )
    }
}
  import com.mycompany.MyTask
  apply plugin: 'java'
  task somTask (type: MyTask) {
 // nothing
}

```

gradle aborts during configuration with the following error:

```gradle
* Where:
Build file 'D:\tmp\gradle-test-proj\build.gradle' line: 18
  * What went wrong:
A problem occurred evaluating root project 'gradle-test-proj'.
> Could not generate a proxy class for class com.mycompany.MyTask.
  * Try:
Run with --info or --debug option to get more log output.
  * Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'gradle-test-proj'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
        at org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38)
        at org.gradle.configuration.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:43)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:463)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:75)
        at org.gradle.configuration.ProjectEvaluationConfigurer.execute(ProjectEvaluationConfigurer.java:23)
        at org.gradle.configuration.ProjectEvaluationConfigurer.execute(ProjectEvaluationConfigurer.java:21)
        at org.gradle.api.internal.Actions$CompositeAction.execute(Actions.java:67)
        at org.gradle.api.internal.Actions$TransformingActionAdapter.execute(Actions.java:96)
        at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:439)
        at org.gradle.api.internal.project.AbstractProject.allprojects(AbstractProject.java:434)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:32)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:38)
        at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:39)
        at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:25)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
        at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions.java:137)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:48)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.Main.main(Main.java:39)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:26)
Caused by: org.gradle.api.GradleException: Could not generate a proxy class for class com.mycompany.MyTask.
        at org.gradle.api.internal.AbstractClassGenerator.generate(AbstractClassGenerator.java:201)
        at org.gradle.api.internal.project.taskfactory.TaskFactory.createTaskObject(TaskFactory.java:105)
        at org.gradle.api.internal.project.taskfactory.TaskFactory.createTask(TaskFactory.java:70)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory.createTask(AnnotationProcessingTaskFactory.java:93)
        at org.gradle.api.internal.project.taskfactory.DependencyAutoWireTaskFactory.createTask(DependencyAutoWireTaskFactory.java:39)
        at org.gradle.api.internal.tasks.DefaultTaskContainer.add(DefaultTaskContainer.java:50)
        at org.gradle.api.internal.project.AbstractProject.task(AbstractProject.java:916)
        at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:216)
        at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:122)
        at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)
        at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:83)
        at build_21nm0ea1t3edkqi880mlpe13sn.run(D:\tmp\gradle-test-proj\build.gradle:18)
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
        ... 32 more
Caused by: org.gradle.api.GradleException: Could not call ClassLoader.defineClass() on org.gradle.util.MutableURLClassLoader@35de4376
        at org.gradle.util.JavaMethod.invoke(JavaMethod.java:62)
        at org.gradle.api.internal.AsmBackedClassGenerator$ClassBuilderImpl.generate(AsmBackedClassGenerator.java:819)
        at org.gradle.api.internal.AbstractClassGenerator.generate(AbstractClassGenerator.java:199)
        ... 44 more
Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file com/mycompany/MyTask_Decorated
        at org.gradle.util.JavaMethod.invoke(JavaMethod.java:56)
        ... 46 more
    BUILD FAILED

```

I read that you switched ASM versions in Gradle 1.2, but when I use 1.2 at runtime, everything works fine. The problems start when using Gradle 1.3 for building projects that rely on the custom task.

Any idea?

Best regards, Mike

---

<div class="post-metadata">

**Author:** ![Peter\_Niederwieser](https://avatars.discourse-cdn.com/v4/letter/p/9f8e36/32.png) [@Peter\_Niederwieser](https://discuss.gradle.org/u/Peter_Niederwieser)\
**Post date:** [January 24, 2013, 8:13pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/2 "2013-01-24T20:13:00Z")

</div>

Do you get the same error when compiling the plugin against 1.3, and then using that in a 1.3 build?

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [January 24, 2013, 8:17pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/3 "2013-01-24T20:17:00Z")

</div>

Yes I do; it looks as if the runtime is relevant, not the compiled class file.

---

<div class="post-metadata">

**Author:** ![Peter\_Niederwieser](https://avatars.discourse-cdn.com/v4/letter/p/9f8e36/32.png) [@Peter\_Niederwieser](https://discuss.gradle.org/u/Peter_Niederwieser)\
**Post date:** [January 24, 2013, 8:20pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/4 "2013-01-24T20:20:00Z")

</div>

Can you provide a reproducible example? Then we can have a closer look.

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [January 25, 2013, 7:04am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/5 "2013-01-25T07:04:00Z")

</div>

Okay, so I compiled my task into a jar and created a minimal project reproducing the error. If you just run “gradle tasks” with gradle 1.2, it works. If you run it with gradle 1.3, it fails.

Here’s the project archive: [https://docs.google.com/file/d/0B6hxwnTm7cjybXhNcnFZR0VMcU0/edit](https://docs.google.com/file/d/0B6hxwnTm7cjybXhNcnFZR0VMcU0/edit)

_Edit_ the task class was compiled with Gradle 1.3 btw.

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [January 29, 2013, 8:49am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/6 "2013-01-29T08:49:00Z")

</div>

Update: tested with Gradle 1.4: same result as with 1.3, even when compiling the task with 1.4

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [February 12, 2013, 8:31am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/7 "2013-02-12T08:31:00Z")

</div>

Any update here? This is really a blocker for us…

---

<div class="post-metadata">

**Author:** ![Peter\_Niederwieser](https://avatars.discourse-cdn.com/v4/letter/p/9f8e36/32.png) [@Peter\_Niederwieser](https://discuss.gradle.org/u/Peter_Niederwieser)\
**Post date:** [February 12, 2013, 8:42am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/8 "2013-02-12T08:42:00Z")

</div>

At the moment, it isn’t clear to me that the problem is on Gradle’s side. If you can provide a minimal reproducible example that allows to build the task from source, I might have another look.

---

<div class="post-metadata">

**Author:** ![luke\_daley](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/luke_daley/32/9890_2.png) [@luke\_daley](https://discuss.gradle.org/u/luke_daley)\
**Post date:** [February 12, 2013, 11:43am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/9 "2013-02-12T11:43:00Z")

</div>

Hi,

Can you please provide the source for the task class. I can’t proceed without it.

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [February 13, 2013, 8:54am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/10 "2013-02-13T08:54:00Z")

</div>

Oh, sure, here’s the gradle project that builds the “failingTask.jar” file used in the sample project above.

[https://docs.google.com/file/d/0B6hxwnTm7cjybGR3NFR6UXhORnM/edit?usp=sharing](https://docs.google.com/file/d/0B6hxwnTm7cjybGR3NFR6UXhORnM/edit?usp=sharing)

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [February 26, 2013, 7:08am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/11 "2013-02-26T07:08:00Z")

</div>

_push_

---

<div class="post-metadata">

**Author:** ![Michael1](https://avatars.discourse-cdn.com/v4/letter/m/eada6e/32.png) [@Michael1](https://discuss.gradle.org/u/Michael1)\
**Post date:** [February 26, 2013, 9:46am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/12 "2013-02-26T09:46:00Z")

</div>

Hi, I tried out the example and run into the same problem. I would be interested in the solution, too. Is there an example of a Java-Task class?

---

<div class="post-metadata">

**Author:** ![luke\_daley](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/luke_daley/32/9890_2.png) [@luke\_daley](https://discuss.gradle.org/u/luke_daley)\
**Post date:** [February 26, 2013, 12:24pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/13 "2013-02-26T12:24:00Z")

</div>

I haven’t worked out exactly why, but it’s the ‘fileMapping(File, File)’ and ‘fileMapping(File)’ methods that trigger this. If you rename them it should work.

I’m still looking into exactly why this happens.

---

<div class="post-metadata">

**Author:** ![Michael1](https://avatars.discourse-cdn.com/v4/letter/m/eada6e/32.png) [@Michael1](https://discuss.gradle.org/u/Michael1)\
**Post date:** [February 26, 2013, 12:46pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/14 "2013-02-26T12:46:00Z")

</div>

Thanks, Luke. On my side it is working now if I rename the methods like you suggested.

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [February 27, 2013, 7:12am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/15 "2013-02-27T07:12:00Z")

</div>

Thanks for pointing us at the right method and coming up with a workaround, Luke.

Changing that method’s name would break the task’s “api” though, and force all our projects to not only update to a new version of the task but also change actual project build files when migrating to the newer gradle versions… I still hope you can find the cause for this and maybe fix it for 1.5 … I think we might migrate directly from 1.2 to 1.5 if it fixes the issue without having to adapt all project build files.

Looking forward to hearing from you! 🙂

---

<div class="post-metadata">

**Author:** ![Michael1](https://avatars.discourse-cdn.com/v4/letter/m/eada6e/32.png) [@Michael1](https://discuss.gradle.org/u/Michael1)\
**Post date:** [February 27, 2013, 9:21am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/16 "2013-02-27T09:21:00Z")

</div>

Hi,

as a newbie to gradle I found this topic very interesting. So I re-arranged your example to have a buildSrc directory:

[www.gradle.org/docs/current/userguide/organizing\_build\_logic.html#sec:build\_sources](http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:build_sources)[http://stackoverflow.com/questions/13874680/what-is-the-purpose-of-gradles-buildsrc-folder/13875350#13875350](http://stackoverflow.com/questions/13874680/what-is-the-purpose-of-gradles-buildsrc-folder/13875350#13875350)

With this I only have to rename one method:

public void fileMappingX(File input) {

Perhaps you can replace all fileMapping(file) calls with fileMapping(file, null) ? No pretty solution either.

---

<div class="post-metadata">

**Author:** ![luke\_daley](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/luke_daley/32/9890_2.png) [@luke\_daley](https://discuss.gradle.org/u/luke_daley)\
**Post date:** [February 27, 2013, 11:16am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/17 "2013-02-27T11:16:00Z")

</div>

Unfortunately this won’t make 1.5, which is close to RC stage.

---

<div class="post-metadata">

**Author:** ![luke\_daley](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/luke_daley/32/9890_2.png) [@luke\_daley](https://discuss.gradle.org/u/luke_daley)\
**Post date:** [February 27, 2013, 11:17am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/18 "2013-02-27T11:17:00Z")

</div>

Raised as GRADLE-2695.

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [March 27, 2013, 3:10pm UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/19 "2013-03-27T15:10:00Z")

</div>

Now that 1.5 is released: Go go go! I’m eager to jump to the latest Gradle again! 😃

---

<div class="post-metadata">

**Author:** ![netmikey](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/netmikey/32/158_2.png) [@netmikey](https://discuss.gradle.org/u/netmikey)\
**Post date:** [April 15, 2013, 10:47am UTC](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530/20 "2013-04-15T10:47:00Z")

</div>

Any update here? Doesn’t look like this is getting much attention ☹

[Next page](https://discuss.gradle.org/t/java-lang-classformaterror-duplicate-method-name-signature-in-custom-tasks-class-file-after-upgrading-to-gradle-1-3/2530.md?page=2)
