Riduidel / aadarchi

A maven archetype to generate easily projects allowing architecture description using a mix of C4, agile architecture, Asciidoc and PlantUML
https://riduidel.github.io/aadarchi/
Apache License 2.0
39 stars 12 forks source link

Seems like there can be some kind of bad duplicate management in TechnologyDetector #426

Closed Riduidel closed 3 months ago

Riduidel commented 3 months ago

I had this exception some time ago

[ERROR] <o.n.a.b.ArchitectureEnhancer> Something wrong happened
java.lang.IllegalStateException: java.lang.IllegalStateException: Duplicate key org.junit.jupiter.junit-jupiter-params (attempted merging values ${junit.version} and ${junit.version})
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstanceWithCaller (Constructor.java:499)
    at java.lang.reflect.Constructor.newInstance (Constructor.java:480)
    at java.util.concurrent.ForkJoinTask.getThrowableException (ForkJoinTask.java:562)
    at java.util.concurrent.ForkJoinTask.reportException (ForkJoinTask.java:591)
    at java.util.concurrent.ForkJoinTask.invoke (ForkJoinTask.java:689)
    at java.util.stream.ForEachOps$ForEachOp.evaluateParallel (ForEachOps.java:159)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel (ForEachOps.java:173)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:233)
    at java.util.stream.ReferencePipeline.forEach (ReferencePipeline.java:596)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.enhancerVisitModel (ArchitectureEnhancer.java:174)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.lambda$enhancerVisitWorkspace$6 (ArchitectureEnhancer.java:142)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.withStopWatch (ArchitectureEnhancer.java:127)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.enhancerVisitWorkspace (ArchitectureEnhancer.java:138)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.lambda$enhance$4 (ArchitectureEnhancer.java:114)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept (ForEachOps.java:183)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:179)
    at java.util.ArrayList.forEach (ArrayList.java:1511)
    at java.util.stream.SortedOps$RefSortingSink.end (SortedOps.java:395)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:510)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential (ForEachOps.java:150)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential (ForEachOps.java:173)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.forEach (ReferencePipeline.java:596)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.lambda$enhance$5 (ArchitectureEnhancer.java:114)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.withStopWatch (ArchitectureEnhancer.java:127)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.enhance (ArchitectureEnhancer.java:112)
    at org.ndx.aadarchi.base.ArchitectureEnhancer$Proxy$_$$_WeldClientProxy.enhance (Unknown Source)
    at org.ndx.aadarchi.base.ArchitectureDocumentationBuilder.run (ArchitectureDocumentationBuilder.java:57)
    at org.ndx.aadarchi.base.ArchitectureDocumentationBuilder$Proxy$_$$_WeldClientProxy.run (Unknown Source)
    at org.ndx.aadarchi.maven.plugin.GenerateDiagramsRunnable.run (GenerateDiagramsRunnable.java:25)
    at org.ndx.aadarchi.maven.plugin.GenerateDiagramsRunnable$Proxy$_$$_WeldClientProxy.run (Unknown Source)
    at org.ndx.aadarchi.maven.cdi.helper.wrappers.AbstractCDIStarterMojo.execute (AbstractCDIStarterMojo.java:91)
    at org.ndx.aadarchi.maven.plugin.GenerateDiagramsMojo.execute (GenerateDiagramsMojo.java:49)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:301)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:157)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:121)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:127)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:294)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: java.lang.IllegalStateException: Duplicate key org.junit.jupiter.junit-jupiter-params (attempted merging values ${junit.version} and ${junit.version})
    at java.util.stream.Collectors.duplicateKeyException (Collectors.java:135)
    at java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1 (Collectors.java:182)
    at java.util.stream.ReduceOps$3ReducingSink.accept (ReduceOps.java:169)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining (ArrayList.java:1625)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:921)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
    at org.ndx.aadarchi.inferer.maven.technologies.TechnologyDecorator.lambda$decorateTechnology$3 (TechnologyDecorator.java:75)
    at org.ndx.aadarchi.inferer.maven.MavenPomDecorator.decorateRecursively (MavenPomDecorator.java:45)
    at org.ndx.aadarchi.inferer.maven.MavenPomDecorator.decorateRecursively (MavenPomDecorator.java:41)
    at org.ndx.aadarchi.inferer.maven.technologies.TechnologyDecorator.decorateTechnology (TechnologyDecorator.java:62)
    at org.ndx.aadarchi.inferer.maven.technologies.TechnologyDecorator$Proxy$_$$_WeldClientProxy.decorateTechnology (Unknown Source)
    at org.ndx.aadarchi.inferer.maven.MavenPomDecorator.decorate (MavenPomDecorator.java:68)
    at org.ndx.aadarchi.inferer.maven.MavenPomDecorator$Proxy$_$$_WeldClientProxy.decorate (Unknown Source)
    at org.ndx.aadarchi.inferer.maven.MavenPomReader.lambda$processModelElement$4 (MavenPomReader.java:92)
    at java.util.Optional.ifPresent (Optional.java:178)
    at org.ndx.aadarchi.inferer.maven.MavenPomReader.processModelElement (MavenPomReader.java:92)
    at org.ndx.aadarchi.inferer.maven.MavenPomReader$Proxy$_$$_WeldClientProxy.processModelElement (Unknown Source)
    at org.ndx.aadarchi.inferer.maven.enhancers.ModelElementMavenEnhancer.startEnhance (ModelElementMavenEnhancer.java:28)
    at org.ndx.aadarchi.inferer.maven.enhancers.ContainerEnhancer.startEnhance (ContainerEnhancer.java:14)
    at org.ndx.aadarchi.inferer.maven.MavenDetailsInfererEnhancer.startVisit (MavenDetailsInfererEnhancer.java:100)
    at org.ndx.aadarchi.inferer.maven.MavenDetailsInfererEnhancer$Proxy$_$$_WeldClientProxy.startVisit (Unknown Source)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.lambda$enhancerVisitSystem$17 (ArchitectureEnhancer.java:186)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.withClassLoader (ArchitectureEnhancer.java:82)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.lambda$enhancerVisitSystem$18 (ArchitectureEnhancer.java:186)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:178)
    at java.util.Spliterators$ArraySpliterator.forEachRemaining (Spliterators.java:992)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.ForEachOps$ForEachTask.compute (ForEachOps.java:290)
    at java.util.concurrent.CountedCompleter.exec (CountedCompleter.java:754)
    at java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:373)
    at java.util.concurrent.ForkJoinTask.invoke (ForkJoinTask.java:686)
    at java.util.stream.ForEachOps$ForEachOp.evaluateParallel (ForEachOps.java:159)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel (ForEachOps.java:173)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:233)
    at java.util.stream.ReferencePipeline.forEach (ReferencePipeline.java:596)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.enhancerVisitSystem (ArchitectureEnhancer.java:188)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.lambda$enhancerVisitModel$13 (ArchitectureEnhancer.java:173)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.withClassLoader (ArchitectureEnhancer.java:73)
    at org.ndx.aadarchi.base.ArchitectureEnhancer.lambda$enhancerVisitModel$14 (ArchitectureEnhancer.java:173)
    at java.util.stream.ReferencePipeline$15$1.accept (ReferencePipeline.java:540)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:179)
    at java.util.Spliterators$ArraySpliterator.forEachRemaining (Spliterators.java:992)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.ForEachOps$ForEachTask.compute (ForEachOps.java:290)
    at java.util.concurrent.CountedCompleter.exec (CountedCompleter.java:754)
    at java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:373)
    at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec (ForkJoinPool.java:1182)
    at java.util.concurrent.ForkJoinPool.scan (ForkJoinPool.java:1655)
    at java.util.concurrent.ForkJoinPool.runWorker (ForkJoinPool.java:1622)
    at java.util.concurrent.ForkJoinWorkerThread.run (ForkJoinWorkerThread.java:165)
Riduidel commented 3 months ago

Easiest to fix that is to use the extended version of Collectors#toMap with four parameters, including the way duplicates will be merged. But how to test that ?