redhat-developer / vscode-java

Java Language Support for Visual Studio Code
Eclipse Public License 2.0
2.05k stars 420 forks source link

Maven multi-module project mapstruct duplicate generation #3668

Open cdisk opened 3 weeks ago

cdisk commented 3 weeks ago
Environment
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]
  2. 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.