diff --git a/lib/src/main/java/de/obqo/decycle/check/Constraint.java b/lib/src/main/java/de/obqo/decycle/check/Constraint.java index e1acd5a..0492327 100644 --- a/lib/src/main/java/de/obqo/decycle/check/Constraint.java +++ b/lib/src/main/java/de/obqo/decycle/check/Constraint.java @@ -47,7 +47,7 @@ public String displayString() { } public static String displayString(final List violations) { - return violations.stream().map(Constraint.Violation::displayString).collect(joining("\n")); + return violations.stream().map(Constraint.Violation::displayString).collect(joining(System.lineSeparator())); } } diff --git a/lib/src/main/java/de/obqo/decycle/configuration/Configuration.java b/lib/src/main/java/de/obqo/decycle/configuration/Configuration.java index 1269a64..eb9ad78 100644 --- a/lib/src/main/java/de/obqo/decycle/configuration/Configuration.java +++ b/lib/src/main/java/de/obqo/decycle/configuration/Configuration.java @@ -109,7 +109,7 @@ public class Configuration { */ @Builder private Configuration( - final String classpath, + @NonNull final String classpath, final List including, final List excluding, final List ignoring, @@ -191,13 +191,14 @@ public List check() { */ @Override public String toString() { - final StringBuilder builder = new StringBuilder("Decycle {\n"); - builder.append(" classpath: ").append(this.classpath).append("\n"); - builder.append(" including: ").append(this.including).append("\n"); - builder.append(" excluding: ").append(this.excluding).append("\n"); - builder.append(" ignoring: ").append(this.ignoring).append("\n"); - builder.append(" slicings: ").append(this.slicings).append("\n"); - builder.append(" constraints: ").append(this.constraints).append("\n"); + final String nl = System.lineSeparator(); + final StringBuilder builder = new StringBuilder("Decycle {").append(nl); + builder.append(" classpath: ").append(this.classpath).append(nl); + builder.append(" including: ").append(this.including).append(nl); + builder.append(" excluding: ").append(this.excluding).append(nl); + builder.append(" ignoring: ").append(this.ignoring).append(nl); + builder.append(" slicings: ").append(this.slicings).append(nl); + builder.append(" constraints: ").append(this.constraints).append(nl); builder.append("}"); return builder.toString(); } diff --git a/plugin-gradle/src/main/java/de/obqo/decycle/gradle/DecycleWorker.java b/plugin-gradle/src/main/java/de/obqo/decycle/gradle/DecycleWorker.java index 20886b6..d4fa4aa 100644 --- a/plugin-gradle/src/main/java/de/obqo/decycle/gradle/DecycleWorker.java +++ b/plugin-gradle/src/main/java/de/obqo/decycle/gradle/DecycleWorker.java @@ -65,17 +65,17 @@ public void execute() { builder.reportResourcesPrefix(resourcesDirName); builder.reportTitle(reportTitle); - buildAndCheck(builder, configuration.isIgnoreFailures(), "\nSee the report at: " + reportFile); + buildAndCheck(builder, configuration.isIgnoreFailures(), reportFile); } catch (final IOException ioException) { throw new GradleException(ioException.getMessage(), ioException); } } else { // reports not enabled - buildAndCheck(builder, configuration.isIgnoreFailures(), ""); + buildAndCheck(builder, configuration.isIgnoreFailures(), null); } } private void buildAndCheck(final ConfigurationBuilder builder, final boolean ignoreFailures, - final String violationsInfo) { + final File reportFile) { final Configuration decycleConfig = builder.build(); logger.info("Decycle configuration: {}", decycleConfig); @@ -83,12 +83,17 @@ private void buildAndCheck(final ConfigurationBuilder builder, final boolean ign logger.debug("decycle result: {}", violations); if (!violations.isEmpty()) { - final String message = Constraint.Violation.displayString(violations) + violationsInfo; + final StringBuilder message = new StringBuilder(Constraint.Violation.displayString(violations)); + if (reportFile != null) { + message.append(System.lineSeparator()).append("See the report at: ").append(reportFile.toURI()); + } if (ignoreFailures) { logger.warn("Violations detected: {}", message); } else { - throw new GradleException(message); + throw new GradleException(message.toString()); } + } else if (reportFile != null) { + logger.info("Decycle HTML report is available at: {}", reportFile.toURI()); } } diff --git a/plugin-gradle/src/test/java/de/obqo/decycle/gradle/DecyclePluginFunctionalTest.java b/plugin-gradle/src/test/java/de/obqo/decycle/gradle/DecyclePluginFunctionalTest.java index ed0cc32..15ac2ef 100644 --- a/plugin-gradle/src/test/java/de/obqo/decycle/gradle/DecyclePluginFunctionalTest.java +++ b/plugin-gradle/src/test/java/de/obqo/decycle/gradle/DecyclePluginFunctionalTest.java @@ -160,10 +160,11 @@ void shouldFailBecauseOfWrongIgnoringMapConfiguration() { @Test void shouldSucceedWithIgnoreFailures() { final BuildResult result = build("ignoreFailures.gradle"); + final String nl = System.lineSeparator(); assertBuildResult(result, TaskOutcome.SUCCESS, "decycleMain") - .contains("\nViolations detected: Violation(slicing=Package, name=cycle, " + - "dependencies=[demo.cycle.a → demo.cycle.b, demo.cycle.b → demo.cycle.a])\n") - .contains("See the report at: "); + .contains(nl + "Violations detected: Violation(slicing=Package, name=cycle, " + + "dependencies=[demo.cycle.a → demo.cycle.b, demo.cycle.b → demo.cycle.a])" + nl) + .contains(nl + "See the report at: file:/"); } @Test diff --git a/plugin-maven/src/main/java/de/obqo/decycle/maven/AbstractDecycleMojo.java b/plugin-maven/src/main/java/de/obqo/decycle/maven/AbstractDecycleMojo.java index 0e42907..0427af6 100644 --- a/plugin-maven/src/main/java/de/obqo/decycle/maven/AbstractDecycleMojo.java +++ b/plugin-maven/src/main/java/de/obqo/decycle/maven/AbstractDecycleMojo.java @@ -182,8 +182,10 @@ private List check(final Configuration config, final File if (!violations.isEmpty()) { logHandler.accept("Violations detected: " + Constraint.Violation.displayString(violations)); if (report != null) { - logHandler.accept("See the report at: " + report); + logHandler.accept("See the report at: " + report.toURI()); } + } else if (report != null) { + log.info("Decycle HTML report is available at: " + report.toURI()); } return violations; }