grails-core
grails-core copied to clipboard
bootJar fails with duplicate classes in Grails 5.0.1 with rest-api profile
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
- Download generated Application 5.0.1 rest-api zip from start.grails.org
- Update views-gradle plugin to 2.1.1 to get past https://github.com/grails/grails-core/issues/12169
- 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
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.
Thanks ! @mattlong-finocomp workaround works.
Almost a year later, this is still not fixed.
The problem still exists, thank you @mattlong-finocomp for the temporary fix 👍
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.