redhat-developer / redhat-developer/vscode-java

Maven multi-module project mapstruct duplicate generation

Open
#3,668 9 comments 0 reactions 1 assignee View on GitHub

@snjeza is already working on this.

Since Mar 11, 2025.

upstream
Dominant language
TypeScript
Stars
2.3k
Forks
546
Avg merge
20h 1m
Merged PRs (30d)
11

Description

Environment
  • Operating System: Windows 10 22H2
  • JDK version: openjdk 21.0.2
  • Visual Studio Code version: 1.89.1
  • Java extension version: v1.32.2024053108 (pre-release)
Steps To Reproduce
  1. Create a Maven multi-module project with the following structure:
    ruoyi-parent
  • ruoyi-admin
    • dependency: ruoyi-modeles/ruoyi-demo
    • dependency: ruoyi-modeles/ruoyi-system
  • ruoyi-modeles
    • ruoyi-demo
      • [mapper auto-generation here]
    • ruoyi-system
      • [mapper auto-generation here]
  1. Build the project.
Internal error in the mapping processor: java.lang.RuntimeException: javax.annotation.processing.FilerException: 
Source file already created: /ruoyi-admin/target/generated-sources/annotations/com/ruoyi/system/domain/vo/SysTenantVoToTenantListVoMapperImpl.java at
org.mapstruct.ap.internal.processor.MapperRenderingProcessor.createSourceFile(MapperRenderingProcessor.java:59)  	at
org.mapstruct.ap.internal.processor.MapperRenderingProcessor.writeToSourceFile(MapperRenderingProcessor.java:39)  	at
org.mapstruct.ap.internal.processor.MapperRenderingProcessor.process(MapperRenderingProcessor.java:29)  	at 
org.mapstruct.ap.internal.processor.MapperRenderingProcessor.process(MapperRenderingProcessor.java:24)  	at 
org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:350)  	at 
org.mapstruct.ap.MappingProcessor.processMapperTypeElement(MappingProcessor.java:330)  	at 
org.mapstruct.ap.MappingProcessor.processMapperElements(MappingProcessor.java:279)  	at 
org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:174)  	at 
org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:141)  	at 
org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:112)  	at 
org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:172)  	at 
org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:134)  	at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:952)  	at 
org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:449)  	at 
org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:468)  	at 
org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:425)  	at 
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:410)  	at 
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:211)  	at 
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:341)  	at 
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79)  	at 
org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:286)  	at 
org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:192)  	at 
org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1077)  	at 
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)  	at 
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:296)  	at 
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:352)  	at 
org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:441)  	at 
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)  	at 
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:444)  	at 
org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:555)  	at 
org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:503)  	at 
org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:585)  	at 
org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:207)  	at 
org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:300)  	at 
org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)  Caused by: javax.annotation.processing.FilerException: Source file already created: /ruoyi-admin/target/generated-sources/annotations/com/ruoyi/system/domain/vo/SysTenantVoToTenantListVoMapperImpl.java  	at 
org.eclipse.jdt.internal.apt.pluggable.core.filer.IdeFilerImpl.createSourceFile(IdeFilerImpl.java:161)  	at 
org.mapstruct.ap.internal.processor.MapperRenderingProcessor.createSourceFile(MapperRenderingProcessor.java:56)  	... 34 more 
Current Result

The mapper files are automatically generated in the generated-sources directory of both the parent and child modules.

Expected Result

The mapper files should be generated only in the respective module's generated-sources directory where the mappers are defined.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.