bootJar fails with duplicate classes in Grails 5.0.1 with rest-api profile
- Dominant language
- Groovy
- Stars
- 2.9k
- Forks
- 975
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 92
Description
### 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
Contributor guide
Research direction
Generate a Grails 5.0.1 rest-api application from start.grails.org, update the views-gradle plugin to 2.1.1, and run the bootJar task with Gradle 7.2; compare the result with Gradle 6.9. The work is done when bootJar completes without the duplicate BOOT-INF/classes error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- groovy, spring-boot
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100