You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Michael Osipov (Jira)" <ji...@apache.org> on 2022/01/10 12:49:00 UTC

[jira] [Comment Edited] (MNG-7386) ModelMerger$MergingList is not serializable

    [ https://issues.apache.org/jira/browse/MNG-7386?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17471967#comment-17471967 ] 

Michael Osipov edited comment on MNG-7386 at 1/10/22, 12:48 PM:
----------------------------------------------------------------

This the relevant ctors/methods are package private and the private {{asList()}} method turns it into an array list too, here would be my naive approach to solve the problem because the list is really an implementation detail during merge:
{noformat}
diff --git a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
index 5d9c2657f..6a6dda476 100644
--- a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
+++ b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
@@ -2652,7 +2652,7 @@ protected Object getExclusionKey( Exclusion exclusion )
      */
     private static <T> List<T> merge( List<T> tgt, List<T> src, boolean sourceDominant, KeyComputer<T> computer )
     {
-        return merge( tgt, src, computer, ( t, s ) -> sourceDominant ? s : t );
+        return new ArrayList<>( merge( tgt, src, computer, ( t, s ) -> sourceDominant ? s : t ) );
     }

     private static <T> List<T> merge( List<T> tgt, List<T> src, KeyComputer<T> computer, BinaryOperator<T> remapping )
{noformat}

Core ITs pass for me.



was (Author: michael-o):
This the relevant ctors/methods are package private and the private {{asList()}} method turns it into an array list too, here would be my naive approach to solve the problem because the list is really an implementation detail during merge:
{code:patch}
diff --git a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
index 5d9c2657f..6a6dda476 100644
--- a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
+++ b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
@@ -2652,7 +2652,7 @@ protected Object getExclusionKey( Exclusion exclusion )
      */
     private static <T> List<T> merge( List<T> tgt, List<T> src, boolean sourceDominant, KeyComputer<T> computer )
     {
-        return merge( tgt, src, computer, ( t, s ) -> sourceDominant ? s : t );
+        return new ArrayList<>( merge( tgt, src, computer, ( t, s ) -> sourceDominant ? s : t ) );
     }

     private static <T> List<T> merge( List<T> tgt, List<T> src, KeyComputer<T> computer, BinaryOperator<T> remapping )
{code}

Core ITs pass for me.


> ModelMerger$MergingList is not serializable
> -------------------------------------------
>
>                 Key: MNG-7386
>                 URL: https://issues.apache.org/jira/browse/MNG-7386
>             Project: Maven
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 3.6.3, 3.8.4
>            Reporter: Kostiantyn Liutovych
>            Priority: Minor
>
> Hello!
> [Spotless Maven plugin|https://github.com/diffplug/spotless] serializes {{org.apache.maven.model.Plugin}} instances to fingerprint plugin's configuration. Serialization fails for Maven 3.6.3 with:
> {code}
> java.io.NotSerializableException: org.apache.maven.model.merge.ModelMerger$MergingList
> {code}
> when plugin configuration comes from {{pluginManagement}}. Class {{org.apache.maven.model.Plugin}} implements {{java.io.Serializable}}, however nested class {{org.apache.maven.model.merge.ModelMerger$MergingList}} does not.
> Would it be possible to make {{MergingList}} serializable or make {{Plugin#dependencies}} field always hold a serializable collection?
> Related issue for the Spotless Maven plugin: https://github.com/diffplug/spotless/issues/1073 and PR with a workaround https://github.com/diffplug/spotless/pull/1074.
> Thank you!



--
This message was sent by Atlassian Jira
(v8.20.1#820001)