grails-core icon indicating copy to clipboard operation
grails-core copied to clipboard

bootJar fails with duplicate classes in Grails 5.0.1 with rest-api profile

Open mattlong-finocomp opened this issue 2 years ago • 5 comments

Task List

  • [x] Steps to reproduce provided
  • [x] Stacktrace (if present) provided
  • [ ] Example that reproduces the problem uploaded to Github
  • [x] Full description of the issue provided (see below)

Steps to Reproduce

  1. Download generated Application 5.0.1 rest-api zip from start.grails.org
  2. Update views-gradle plugin to 2.1.1 to get past https://github.com/grails/grails-core/issues/12169
  3. run bootJar gradle task

Expected Behaviour

The bootJar should be built without error.

Actual Behaviour

Get the following error:

Execution failed for task ':bootJar'.
> Entry BOOT-INF/classes/myapp_error_gson$_run_closure1.class is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.2/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.

This behaviour seems new with the upgrade to Gradle 7.2. Using Gradle 6.9 this doesn't occur.

Stacktrace:

Caused by: org.gradle.api.InvalidUserCodeException: Entry BOOT-INF/classes/myapp_error_gson$_run_closure1.class is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.2/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.
	at org.gradle.api.internal.file.copy.DuplicateHandlingCopyActionDecorator.failWithIncorrectDuplicatesStrategySetup(DuplicateHandlingCopyActionDecorator.java:72)
	at org.gradle.api.internal.file.copy.DuplicateHandlingCopyActionDecorator.lambda$execute$0(DuplicateHandlingCopyActionDecorator.java:53)
	at org.gradle.api.internal.file.copy.CopyFileVisitorImpl.processFile(CopyFileVisitorImpl.java:68)
	at org.gradle.api.internal.file.copy.CopyFileVisitorImpl.visitFile(CopyFileVisitorImpl.java:52)
	at org.gradle.api.internal.file.collections.DefaultDirectoryWalker$PathVisitor.visitFile(DefaultDirectoryWalker.java:115)
	at org.gradle.api.internal.file.collections.DefaultDirectoryWalker$PathVisitor.visitFile(DefaultDirectoryWalker.java:68)
	at org.gradle.api.internal.file.collections.DefaultDirectoryWalker.walkDir(DefaultDirectoryWalker.java:62)
	at org.gradle.api.internal.file.collections.DirectoryFileTree.walkDir(DirectoryFileTree.java:149)
	at org.gradle.api.internal.file.collections.DirectoryFileTree.visitFrom(DirectoryFileTree.java:127)
	at org.gradle.api.internal.file.collections.DirectoryFileTree.visit(DirectoryFileTree.java:112)
	at org.gradle.api.internal.file.collections.FileTreeAdapter.visit(FileTreeAdapter.java:90)
	at org.gradle.api.internal.file.CompositeFileTree.visit(CompositeFileTree.java:102)
	at org.gradle.api.internal.file.copy.CopySpecActionImpl.execute(CopySpecActionImpl.java:43)
	at org.gradle.api.internal.file.copy.CopySpecActionImpl.execute(CopySpecActionImpl.java:25)
	at org.gradle.api.internal.file.copy.DefaultCopySpec$DefaultCopySpecResolver.walk(DefaultCopySpec.java:766)
	at org.gradle.api.internal.file.copy.DefaultCopySpec$DefaultCopySpecResolver.walk(DefaultCopySpec.java:768)
	at org.gradle.api.internal.file.copy.DefaultCopySpec$DefaultCopySpecResolver.walk(DefaultCopySpec.java:768)
	at org.gradle.api.internal.file.copy.DefaultCopySpec.walk(DefaultCopySpec.java:506)
	at org.gradle.api.internal.file.copy.CopySpecBackedCopyActionProcessingStream.process(CopySpecBackedCopyActionProcessingStream.java:42)
	at org.gradle.api.internal.file.copy.DuplicateHandlingCopyActionDecorator.lambda$execute$1(DuplicateHandlingCopyActionDecorator.java:47)
	at org.gradle.api.internal.file.copy.NormalizingCopyActionDecorator.lambda$execute$1(NormalizingCopyActionDecorator.java:62)
	at org.springframework.boot.gradle.tasks.bundling.BootZipCopyAction.writeArchive(BootZipCopyAction.java:143)
	at org.springframework.boot.gradle.tasks.bundling.BootZipCopyAction.writeArchive(BootZipCopyAction.java:130)
	at org.springframework.boot.gradle.tasks.bundling.BootZipCopyAction.execute(BootZipCopyAction.java:119)
	at org.gradle.api.internal.file.copy.NormalizingCopyActionDecorator.execute(NormalizingCopyActionDecorator.java:61)
	at org.gradle.api.internal.file.copy.DuplicateHandlingCopyActionDecorator.execute(DuplicateHandlingCopyActionDecorator.java:47)
	at org.gradle.api.internal.file.copy.CopyActionExecuter.execute(CopyActionExecuter.java:47)
	at org.gradle.api.tasks.AbstractCopyTask.copy(AbstractCopyTask.java:148)
	at org.springframework.boot.gradle.tasks.bundling.BootJar.copy(BootJar.java:114)

Environment Information

  • Operating System: Pop!_OS 20.04
  • Grails Version: 5.0.1
  • JDK Version: AdoptOpenJDK 11.0.11
  • Container Version (If Applicable): N/A

mattlong-finocomp avatar Nov 15 '21 22:11 mattlong-finocomp

This can be worked around by adding the following to build.gradle:

bootJar {
    duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
}

But it would be good if the root cause was found for why duplicates are happening in the first place.

mattlong-finocomp avatar Nov 15 '21 23:11 mattlong-finocomp

Thanks ! @mattlong-finocomp workaround works.

cristian-com avatar Nov 18 '21 16:11 cristian-com

Almost a year later, this is still not fixed.

davidkron avatar Oct 06 '22 12:10 davidkron

The problem still exists, thank you @mattlong-finocomp for the temporary fix 👍

gsartori avatar Jan 30 '23 09:01 gsartori

I also get this error for the bootWar and war Gradle tasks (using Grails 5.1.9). It is worth noting that the issue happens when using Java 11. The tasks succeed when I use Java 8.

tylervz avatar Feb 22 '23 19:02 tylervz