diff --git a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/LockFileFacade.java b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/LockFileFacade.java index 36aed9daa..bd3d927df 100644 --- a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/LockFileFacade.java +++ b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/LockFileFacade.java @@ -96,7 +96,7 @@ public static LockFile generateLockFileFromProject( AbstractChecksumCalculator checksumCalculator, MetaData metadata) { PluginLogManager.getLog().info(String.format("Generating lock file for project %s", project.getArtifactId())); - Set plugins = new TreeSet<>(); + Set plugins = new TreeSet<>(Comparator.comparing(MavenPlugin::getChecksum)); if (metadata.getConfig().isIncludeMavenPlugins()) { plugins = getAllPlugins(project, session, dependencyCollectorBuilder, checksumCalculator); } @@ -127,7 +127,7 @@ private static Set getAllPlugins( MavenSession session, DependencyCollectorBuilder dependencyCollectorBuilder, AbstractChecksumCalculator checksumCalculator) { - Set plugins = new TreeSet<>(); + Set plugins = new TreeSet<>(Comparator.comparing(MavenPlugin::getChecksum)); for (Artifact pluginArtifact : project.getPluginArtifacts()) { RepositoryInformation repositoryInformation = checksumCalculator.getPluginResolvedField(pluginArtifact); Set pluginDependencies = @@ -296,19 +296,15 @@ private static Set MutableGraph graph = GraphBuilder.directed().build(); rootNode.accept(new GraphBuildingNodeVisitor(graph)); - PluginLogManager.getLog() - .debug(String.format( - "Built graph with %d nodes for plugin %s", + PluginLogManager.getLog().debug(String.format("Built graph with %d nodes for plugin %s", graph.nodes().size(), pluginArtifact)); - - DependencyGraph dependencyGraph = DependencyGraph.of(graph, checksumCalculator, false); - + // Ignore test-scoped dependencies for plugins + DependencyGraph dependencyGraph = DependencyGraph.of(graph, checksumCalculator,false, true); // Get root dependency nodes (excluding the plugin project itself) Set roots = dependencyGraph.getRoots(); PluginLogManager.getLog() .info(String.format("Resolved %4d dependencies for plugin %s", roots.size(), pluginArtifact)); return roots; - } catch (Exception e) { PluginLogManager.getLog() .warn(String.format("Could not resolve dependencies for plugin %s", pluginArtifact), e); @@ -335,10 +331,10 @@ private static DependencyGraph graph( .info(String.format( "Resolved %4d dependencies for project %s", graph.nodes().size(), project)); - return DependencyGraph.of(graph, checksumCalculator, reduced); + return DependencyGraph.of(graph, checksumCalculator, reduced,false); } catch (Exception e) { PluginLogManager.getLog().warn("Could not generate graph", e); - return DependencyGraph.of(GraphBuilder.directed().build(), checksumCalculator, reduced); + return DependencyGraph.of(GraphBuilder.directed().build(), checksumCalculator, reduced,false); } } @@ -364,10 +360,10 @@ private static Pom constructRecursivePom( String relativePath = project.getFile() == null ? null : initialProject - .getBasedir() - .toPath() - .relativize(project.getFile().toPath()) - .toString(); + .getBasedir() + .toPath() + .relativize(project.getFile().toPath()) + .toString(); String checksum = null; ResolvedUrl resolved = null; RepositoryId repoId = null; @@ -404,4 +400,4 @@ private static Pom constructRecursivePom( return lastPom; } -} +} \ No newline at end of file diff --git a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/graph/DependencyGraph.java b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/graph/DependencyGraph.java index fd6f184a1..35e03aa8b 100644 --- a/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/graph/DependencyGraph.java +++ b/maven_plugin/src/main/java/io/github/chains_project/maven_lockfile/graph/DependencyGraph.java @@ -50,21 +50,19 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(graph); } - public Optional getParentForNode(DependencyNode node) { return graph.stream().filter(n -> n.id.equals(node.getParent())).findFirst(); } - public static DependencyGraph of( MutableGraph graph, AbstractChecksumCalculator calc, - boolean reduced) { + boolean reduced,boolean skipPluginTestScope) { var roots = graph.nodes().stream() .filter(it -> graph.predecessors(it).isEmpty()) .collect(Collectors.toList()); Set nodes = new TreeSet<>(Comparator.comparing(DependencyNode::getComparatorString)); for (var artifact : roots) { - createDependencyNode(artifact, graph, calc, true, reduced).ifPresent(nodes::add); + createDependencyNode(artifact, graph, calc, true, reduced,skipPluginTestScope).ifPresent(nodes::add); } // maven dependency tree contains the project itself as a root node. We remove it here. Set dependencyRoots = nodes.stream() @@ -74,13 +72,12 @@ public static DependencyGraph of( dependencyRoots.forEach(v -> v.setParent(null)); return new DependencyGraph(dependencyRoots); } - private static Optional createDependencyNode( org.apache.maven.shared.dependency.graph.DependencyNode node, Graph graph, AbstractChecksumCalculator calc, boolean isRoot, - boolean reduce) { + boolean reduce,boolean skipPluginTestScope) { PluginLogManager.getLog() .debug(String.format("Creating dependency node for: %s, root: %s", node.toNodeString(), isRoot)); var groupId = GroupId.of(node.getArtifact().getGroupId()); @@ -90,6 +87,11 @@ private static Optional createDependencyNode( PluginLogManager.getLog().debug(String.format("Calculating checksum for %s", node.toNodeString())); var checksum = isRoot ? "" : calc.calculateArtifactChecksum(node.getArtifact()); var scope = MavenScope.fromString(node.getArtifact().getScope()); + if (skipPluginTestScope && !isRoot && scope == MavenScope.TEST) { + PluginLogManager.getLog().debug(String.format("Skipping test-scoped plugin dependency %s:%s:%s", + node.getArtifact().getGroupId(),node.getArtifact().getArtifactId(),node.getArtifact().getVersion())); + return Optional.empty(); + } PluginLogManager.getLog().debug(String.format("Resolving repository information for %s", node.toNodeString())); var repositoryInformation = isRoot ? RepositoryInformation.Unresolved() : calc.getArtifactResolvedField(node.getArtifact()); @@ -113,8 +115,8 @@ private static Optional createDependencyNode( value.setSelectedVersion(baseVersion); value.setIncluded(included); for (var artifact : graph.successors(node)) { - createDependencyNode(artifact, graph, calc, false, reduce).ifPresent(value::addChild); + createDependencyNode(artifact, graph, calc, false, reduce,skipPluginTestScope).ifPresent(value::addChild); } return Optional.of(value); } -} +} \ No newline at end of file