From 1ea2b5ad08d9b293cb54fff5d44fdc182fc286ae Mon Sep 17 00:00:00 2001 From: cesarsotovalero Date: Mon, 16 Nov 2020 12:19:49 +0100 Subject: [PATCH] Fix https://github.com/castor-software/depclean/issues/18 --- .../java/se/kth/depclean/DepCleanMojo.java | 27 ++++++++++++++++--- .../java/se/kth/depclean/util/JarUtils.java | 2 +- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/depclean-maven-plugin/src/main/java/se/kth/depclean/DepCleanMojo.java b/depclean-maven-plugin/src/main/java/se/kth/depclean/DepCleanMojo.java index 5f01955e..15a533dd 100644 --- a/depclean-maven-plugin/src/main/java/se/kth/depclean/DepCleanMojo.java +++ b/depclean-maven-plugin/src/main/java/se/kth/depclean/DepCleanMojo.java @@ -60,12 +60,15 @@ import java.nio.file.Paths; import java.text.CharacterIterator; import java.text.StringCharacterIterator; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** * This Maven mojo is the main class of DepClean. @@ -285,16 +288,16 @@ public void execute() throws MojoExecutionException, MojoFailureException { System.out.println(SEPARATOR); System.out.println("Used direct dependencies" + " [" + usedDeclaredArtifactsCoordinates.size() + "]" + ": "); - usedDeclaredArtifactsCoordinates.stream().forEach(s -> System.out.println("\t" + s + " (" + getSize(s, sizeOfDependencies) + ")")); + printDependencies(sizeOfDependencies, usedDeclaredArtifactsCoordinates); System.out.println("Used transitive dependencies" + " [" + usedUndeclaredArtifactsCoordinates.size() + "]" + ": "); - usedUndeclaredArtifactsCoordinates.stream().forEach(s -> System.out.println("\t" + s + " (" + getSize(s, sizeOfDependencies) + ")")); + printDependencies(sizeOfDependencies, usedUndeclaredArtifactsCoordinates); System.out.println("Potentially unused direct dependencies" + " [" + unusedDeclaredArtifactsCoordinates.size() + "]" + ": "); - unusedDeclaredArtifactsCoordinates.stream().forEach(s -> System.out.println("\t" + s + " (" + getSize(s, sizeOfDependencies) + ")")); + printDependencies(sizeOfDependencies, unusedDeclaredArtifactsCoordinates); System.out.println("Potentially unused transitive dependencies" + " [" + unusedUndeclaredArtifactsCoordinates.size() + "]" + ": "); - unusedUndeclaredArtifactsCoordinates.stream().forEach(s -> System.out.println("\t" + s + " (" + getSize(s, sizeOfDependencies) + ")")); + printDependencies(sizeOfDependencies, unusedUndeclaredArtifactsCoordinates); if (!ignoreDependencies.isEmpty()) { System.out.println(SEPARATOR); @@ -400,6 +403,22 @@ public void execute() throws MojoExecutionException, MojoFailureException { } } + /** + * Print the status of the depenencies to the standard output. + * The format is: "[coordinates][scope] [(size)]" + * + * @param sizeOfDependencies A map with the size of the dependencies. + * @param dependencies The set dependencies to print. + */ + private void printDependencies(Map sizeOfDependencies, Set dependencies) { + dependencies + .stream() + .sorted(Comparator.comparing(o -> sizeOfDependencies.get(o.split(":")[1] + "-" + o.split(":")[2] + ".jar"))) + .collect(Collectors.toCollection(LinkedList::new)) + .descendingIterator() + .forEachRemaining(s -> System.out.println("\t" + s + " (" + getSize(s, sizeOfDependencies) + ")")); + } + /** * Get the size of the dependency in humnan readable format. * diff --git a/depclean-maven-plugin/src/main/java/se/kth/depclean/util/JarUtils.java b/depclean-maven-plugin/src/main/java/se/kth/depclean/util/JarUtils.java index 6b2fb28d..ed399e91 100644 --- a/depclean-maven-plugin/src/main/java/se/kth/depclean/util/JarUtils.java +++ b/depclean-maven-plugin/src/main/java/se/kth/depclean/util/JarUtils.java @@ -76,7 +76,7 @@ private static void decompressJarFile(String destDirectory, String jarFilePath) JarEntry entry = jarIn.getNextJarEntry(); // iterates over all the entries in the jar file while (entry != null) { - String filePath = destDirectory + "/" + entry.getName(); + String filePath = destDirectory + File.separator + entry.getName(); if (!entry.isDirectory()) { new File(filePath).getParentFile().mkdirs(); // if the entry is a file, extracts it