diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/incremental/PluginFingerprint.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/incremental/PluginFingerprint.java index 48dfb1914d..c869963f32 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/incremental/PluginFingerprint.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/incremental/PluginFingerprint.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 DiffPlug + * Copyright 2021-2022 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,9 +17,12 @@ import java.io.IOException; import java.io.UncheckedIOException; +import java.util.ArrayList; import java.util.Base64; +import java.util.List; import java.util.Objects; +import org.apache.maven.model.Dependency; import org.apache.maven.model.Plugin; import org.apache.maven.project.MavenProject; @@ -77,6 +80,13 @@ public String toString() { } private static byte[] digest(Plugin plugin, Iterable formatters) { + // dependencies can be an unserializable org.apache.maven.model.merge.ModelMerger$MergingList + // replace it with a serializable ArrayList + List dependencies = null; + if (plugin != null) { + dependencies = plugin.getDependencies(); + plugin.setDependencies(new ArrayList<>(dependencies)); + } try (ObjectDigestOutputStream out = ObjectDigestOutputStream.create()) { out.writeObject(plugin); for (Formatter formatter : formatters) { @@ -86,6 +96,11 @@ private static byte[] digest(Plugin plugin, Iterable formatters) { return out.digest(); } catch (IOException e) { throw new UncheckedIOException("Unable to serialize plugin " + plugin, e); + } finally { + // reset the original list + if (plugin != null) { + plugin.setDependencies(dependencies); + } } } }