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)