apache / apache/grails-core

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

Open
#12,181 5 comments 0 reactions 0 assignees View on GitHub
info: workaround available
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.