From 2bffa6e1c56bffd4960fc80eb394b21d6b4a321c Mon Sep 17 00:00:00 2001 From: John Rokicki Date: Thu, 3 Sep 2020 15:34:25 -0400 Subject: [PATCH 1/4] html report --- .../versions/reporter/HtmlReporter.groovy | 287 ++++++++++++++++++ .../updates/DependencyUpdatesReporter.groovy | 4 + 2 files changed, 291 insertions(+) create mode 100644 src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy diff --git a/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy b/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy new file mode 100644 index 00000000..2d3f73cb --- /dev/null +++ b/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy @@ -0,0 +1,287 @@ +package com.github.benmanes.gradle.versions.reporter + +import com.github.benmanes.gradle.versions.reporter.result.DependenciesGroup +import com.github.benmanes.gradle.versions.reporter.result.Dependency +import com.github.benmanes.gradle.versions.reporter.result.DependencyLatest +import com.github.benmanes.gradle.versions.reporter.result.DependencyOutdated +import com.github.benmanes.gradle.versions.reporter.result.DependencyUnresolved +import com.github.benmanes.gradle.versions.reporter.result.Result +import com.github.benmanes.gradle.versions.reporter.result.VersionAvailable +import groovy.text.markup.MarkupTemplateEngine +import groovy.transform.CompileStatic +import groovy.transform.TupleConstructor +import groovy.xml.MarkupBuilder + +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.CURRENT +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.RELEASE_CANDIDATE +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.RELEASE_CANDIDATE +import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.RELEASE_CANDIDATE + +/** + * A xml reporter for the dependency updates results. + */ +@CompileStatic +@TupleConstructor(callSuper = true, includeSuperProperties = true, includeSuperFields = true) +class HtmlReporter extends AbstractReporter { + + String header = """ + + Project Dependency Updates Report + """ + + @Override + def write(printStream, Result result) { + writeHeader(printStream) + + if (result.count == 0) { + printStream.println '

No dependencies found.

' + } else { + writeUpToDate(printStream, result) + writeExceedLatestFound(printStream, result) + writeUpgrades(printStream, result) + writeUnresolved(printStream, result) + } + + writeGradleUpdates(printStream, result) + } + + private def writeHeader(printStream) { + printStream.println header.stripMargin() + } + + private def writeUpToDate(printStream, Result result) { + SortedSet versions = result.getCurrent().getDependencies() + if (!versions.isEmpty()) { + printStream.println("

Current dependencies

") + printStream.println("

The following dependencies are using the latest ${revision} version:

") + printStream.println("") + getCurrentRows(result).each { printStream.println it } + printStream.println("
") + printStream.println("
") + } + } + + private def getCurrentRows(Result result) { + List rows = new ArrayList<>(); + // The following dependencies are using the latest milestone version: + DependenciesGroup list = result.getCurrent(); + rows.add("NameGroupURLCurrent Version") + for (Dependency item : list.dependencies) { + String rowString; + String rowStringFmt = "%s%s%s%s" + rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), + getUrlString(item.getProjectUrl()), getVersionString(item.getGroup(), item.getName(), item.getVersion())) + rows.add(rowString) + } + return rows + } + + private def writeExceedLatestFound(printStream, Result result) { + SortedSet versions = result.getExceeded().getDependencies(); + if (!versions.isEmpty()) { + // The following dependencies exceed the version found at the ' + // + revision + ' revision level: + printStream.println("

Exceeded dependencies

") + printStream.println("

The following dependencies exceed the version found at the ${revision} revision level:

") + printStream.println("") + getExceededRows(result).each { printStream.println it } + printStream.println("
") + printStream.println("
") + } + } + + private def getExceededRows(Result result) { + List rows = new ArrayList<>(); + // The following dependencies are using the latest milestone version: + DependenciesGroup list = result.getExceeded() + rows.add("NameGroupURLCurrent VersionLatest Version") + for (DependencyLatest item : list.dependencies) { + String rowString; + String rowStringFmt = "%s%s%s%s%s" + rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), + getUrlString(item.getProjectUrl()), getVersionString(item.getGroup(), item.getName(), item.getVersion()), + getVersionString(item.getGroup(), item.getName(), item.getLatest())) + rows.add(rowString) + } + return rows + } + + private def writeUpgrades(printStream, Result result) { + SortedSet versions = result.getOutdated().getDependencies(); + if (!versions.isEmpty()) { + // The following dependencies exceed the version found at the ' + // + revision + ' revision level: + printStream.println("

Later dependencies

") + printStream.println("

The following dependencies have later ${revision} versions:

") + printStream.println("") + getUpgradesRows(result).each { printStream.println it } + printStream.println("
") + printStream.println("
") + } + } + + private def getUpgradesRows(Result result) { + List rows = new ArrayList<>(); + // The following dependencies are using the latest milestone version: + DependenciesGroup list = result.getOutdated() + rows.add("NameGroupURLCurrent VersionLatest Version") + for (DependencyOutdated item : list.dependencies) { + String rowString; + String rowStringFmt = "%s%s%s%s%s" + rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), + getUrlString(item.getProjectUrl()), getVersionString(item.getGroup(), item.getName(), item.getVersion()), + getVersionString(item.getGroup(), item.getName(), item.getAvailable().getMilestone())) + rows.add(rowString) + } + return rows + } + + private def writeUnresolved(printStream, Result result) { + SortedSet versions = result.getUnresolved().getDependencies(); + if (!versions.isEmpty()) { + // '\nFailed to determine the latest version for the following dependencies ' + // + '(use --info for details):') + printStream.println("

Unresolved dependencies

") + printStream.println("

Failed to determine the latest version for the following dependencies:

") + printStream.println("") + getUnresolvedRows(result).each { printStream.println it } + printStream.println("
") + printStream.println("
") + } + } + + private def getUnresolvedRows(Result result) { + List rows = new ArrayList<>(); + // The following dependencies are using the latest milestone version: + DependenciesGroup list = result.getUnresolved() + rows.add("NameGroupURLCurrent Version") + for (DependencyUnresolved item : list.dependencies) { + String rowString; + String rowStringFmt = "%s%s%s%s" + rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), + getUrlString(item.getProjectUrl()) , getVersionString(item.getGroup(), item.getName(), item.getVersion())) + rows.add(rowString) + } + return rows + } + + private def writeGradleUpdates(printStream, Result result) { + if (!result.gradle.isEnabled()) { + return + } + + printStream.println("

Gradle ${gradleReleaseChannel} updates

") + + + printStream.println("Gradle ${gradleReleaseChannel} updates:") + result.gradle.with { + // Log Gradle update checking failures. + if (current.isFailure) { + printStream.println("

[ERROR] [release channel: ${CURRENT.id}] " + current.reason + "

") + } + if ((gradleReleaseChannel == RELEASE_CANDIDATE.id || gradleReleaseChannel == NIGHTLY.id) && releaseCandidate.isFailure) { + printStream.println("

[ERROR] [release channel: ${RELEASE_CANDIDATE.id}] " + releaseCandidate.reason + "

") + } + if (gradleReleaseChannel == NIGHTLY.id && nightly.isFailure) { + printStream.println("

[ERROR] [release channel: ${NIGHTLY.id}] " + nightly.reason + "

") + } + + // print Gradle updates in breadcrumb format + printStream.print("

Gradle: [" + running.version) + boolean updatePrinted = false + if (current.isUpdateAvailable && current > running) { + updatePrinted = true + printStream.print(" -> " + current.version) + } + if ((gradleReleaseChannel == RELEASE_CANDIDATE.id || gradleReleaseChannel == NIGHTLY.id) && releaseCandidate.isUpdateAvailable && releaseCandidate > current) { + updatePrinted = true + printStream.print(" -> " + releaseCandidate.version) + } + if (gradleReleaseChannel == NIGHTLY.id && nightly.isUpdateAvailable && nightly > current) { + updatePrinted = true + printStream.print(" -> " + nightly.version) + } + if (!updatePrinted) { + printStream.print(": UP-TO-DATE") + } + printStream.println("]

") + } + } + + private def getUrlString(String url) { + if (url == null) { + return ""; + } + return String.format("%s", url, url) + } + + private def getVersionString(String group, String name, String version) { + String mvn = getMvnVersionString(group, name, version) + String bintray = getBintrayVersionString(group, name, version) + return String.format("%s %s %s", version, mvn, bintray) + } + + private def getMvnVersionString(String group, String name, String version) { + // https://mvnrepository.com/artifact/com.azure/azure-core-http-netty/1.5.4 + if (version == null) { + return ""; + } + String versionUrl = String.format("https://mvnrepository.com/artifact/%s/%s/%s", group, name, version) + return String.format("%s", versionUrl, "Mvn") + } + + private def getBintrayVersionString(String group, String name, String version) { + // https://bintray.com/bintray/jcenter/com.azure%3Aazure-sdk-template/1.0.3 + if (version == null) { + return ""; + } + String versionUrl = String.format("https://bintray.com/bintray/jcenter/%s%%3A%s/%s", group, name, version) + return String.format("%s", versionUrl, "Bintray") + } + + @Override + def getFileExtension() { + return 'html' + } +} diff --git a/src/main/groovy/com/github/benmanes/gradle/versions/updates/DependencyUpdatesReporter.groovy b/src/main/groovy/com/github/benmanes/gradle/versions/updates/DependencyUpdatesReporter.groovy index b2a6564c..efce8207 100644 --- a/src/main/groovy/com/github/benmanes/gradle/versions/updates/DependencyUpdatesReporter.groovy +++ b/src/main/groovy/com/github/benmanes/gradle/versions/updates/DependencyUpdatesReporter.groovy @@ -19,6 +19,7 @@ import com.github.benmanes.gradle.versions.reporter.JsonReporter import com.github.benmanes.gradle.versions.reporter.PlainTextReporter import com.github.benmanes.gradle.versions.reporter.Reporter import com.github.benmanes.gradle.versions.reporter.XmlReporter +import com.github.benmanes.gradle.versions.reporter.HtmlReporter import com.github.benmanes.gradle.versions.reporter.result.DependenciesGroup import com.github.benmanes.gradle.versions.reporter.result.Dependency import com.github.benmanes.gradle.versions.reporter.result.DependencyLatest @@ -130,6 +131,9 @@ class DependencyUpdatesReporter { case 'xml': reporter = new XmlReporter(project, revision, gradleReleaseChannel) break + case 'html': + reporter = new HtmlReporter(project, revision, gradleReleaseChannel) + break default: reporter = new PlainTextReporter(project, revision, gradleReleaseChannel) } From 5f8cfff489102a4397df1bc632ff605bf0955856 Mon Sep 17 00:00:00 2001 From: John Rokicki Date: Fri, 4 Sep 2020 14:27:27 -0400 Subject: [PATCH 2/4] review items --- README.md | 10 +- .../versions/reporter/HtmlReporter.groovy | 103 +++++++++++++----- 2 files changed, 83 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index a91c142c..972f6120 100644 --- a/README.md +++ b/README.md @@ -276,12 +276,13 @@ The task property `outputFormatter` controls the report output format. The follo * `"plain"`: format output file as plain text (default) * `"json"`: format output file as json text * `"xml"`: format output file as xml text, can be used by other plugins (e.g. sonar) + * `"html"`: format output file as html * a `Closure`: will be called with the result of the dependency update analysis (see [example below](#custom_report_format)) You can also set multiple output formats using comma as the separator: ```groovy -gradle dependencyUpdates -Drevision=release -DoutputFormatter=json,xml +gradle dependencyUpdates -Drevision=release -DoutputFormatter=json,xml,html ``` The task property `outputDir` controls the output directory for the report file(s). The directory will be created if it does not exist. @@ -549,6 +550,13 @@ XML report ``` +HTML report + +``` +The HTML report provides sections for current, outdated, exceeded and unresolved dependencies. +``` + + #### Custom report format If you need to create a report in a custom format, you can set the `dependencyUpdates` tasks's `outputFormatter` property to a Closure. The closure will be called with a single argument that is an instance of [com.github.benmanes.gradle.versions.reporter.result.Result](src/main/groovy/com/github/benmanes/gradle/versions/reporter/result/Result.groovy). diff --git a/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy b/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy index 2d3f73cb..4e01fb00 100644 --- a/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy +++ b/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy @@ -6,24 +6,15 @@ import com.github.benmanes.gradle.versions.reporter.result.DependencyLatest import com.github.benmanes.gradle.versions.reporter.result.DependencyOutdated import com.github.benmanes.gradle.versions.reporter.result.DependencyUnresolved import com.github.benmanes.gradle.versions.reporter.result.Result -import com.github.benmanes.gradle.versions.reporter.result.VersionAvailable -import groovy.text.markup.MarkupTemplateEngine import groovy.transform.CompileStatic import groovy.transform.TupleConstructor -import groovy.xml.MarkupBuilder import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.CURRENT import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY -import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY -import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY -import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY -import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.NIGHTLY -import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.RELEASE_CANDIDATE -import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.RELEASE_CANDIDATE import static com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel.RELEASE_CANDIDATE /** - * A xml reporter for the dependency updates results. + * An html reporter for the dependency updates results. */ @CompileStatic @TupleConstructor(callSuper = true, includeSuperProperties = true, includeSuperFields = true) @@ -40,35 +31,66 @@ class HtmlReporter extends AbstractReporter { .currentInfo { border-collapse: collapse; } + .currentInfo header { + cursor:pointer; + padding: 12px 15px; + } .currentInfo td { border: 1px solid black; padding: 12px 15px; + border-collapse: collapse; } .currentInfo tr:nth-child(even) { background-color: #E4FFB7; padding: 12px 15px; + border-collapse: collapse; } .currentInfo tr:nth-child(odd) { background-color: #EFFFD2; padding: 12px 15px; + border-collapse: collapse; } .warningInfo { border-collapse: collapse; } + .warningInfo header { + cursor:pointer; + padding: 12px 15px; + } .warningInfo td { border: 1px solid black; padding: 12px 15px; + border-collapse: collapse; } .warningInfo tr:nth-child(even) { background-color: #FFFF66; padding: 12px 15px; + border-collapse: collapse; } .warningInfo tr:nth-child(odd) { background-color: #FFFFCC; padding: 12px 15px; + border-collapse: collapse; } - """ + + + + + + + """ @Override def write(printStream, Result result) { @@ -106,12 +128,13 @@ class HtmlReporter extends AbstractReporter { List rows = new ArrayList<>(); // The following dependencies are using the latest milestone version: DependenciesGroup list = result.getCurrent(); - rows.add("NameGroupURLCurrent Version") + rows.add("Current dependencies(Click to expand)") + rows.add("NameGroupURLCurrent Version") for (Dependency item : list.dependencies) { String rowString; String rowStringFmt = "%s%s%s%s" rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), - getUrlString(item.getProjectUrl()), getVersionString(item.getGroup(), item.getName(), item.getVersion())) + getUrlString(item.getProjectUrl()), getVersionString(item.getGroup(), item.getName(), getDisplayableVersion(item))) rows.add(rowString) } return rows @@ -135,13 +158,14 @@ class HtmlReporter extends AbstractReporter { List rows = new ArrayList<>(); // The following dependencies are using the latest milestone version: DependenciesGroup list = result.getExceeded() - rows.add("NameGroupURLCurrent VersionLatest Version") + rows.add("Exceeded dependencies(Click to collapse)") + rows.add("NameGroupURLCurrent VersionLatest Version") for (DependencyLatest item : list.dependencies) { String rowString; String rowStringFmt = "%s%s%s%s%s" rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), getUrlString(item.getProjectUrl()), getVersionString(item.getGroup(), item.getName(), item.getVersion()), - getVersionString(item.getGroup(), item.getName(), item.getLatest())) + getVersionString(item.getGroup(), item.getName(), getDisplayableVersion(item))) rows.add(rowString) } return rows @@ -150,8 +174,6 @@ class HtmlReporter extends AbstractReporter { private def writeUpgrades(printStream, Result result) { SortedSet versions = result.getOutdated().getDependencies(); if (!versions.isEmpty()) { - // The following dependencies exceed the version found at the ' - // + revision + ' revision level: printStream.println("

Later dependencies

") printStream.println("

The following dependencies have later ${revision} versions:

") printStream.println("") @@ -163,25 +185,36 @@ class HtmlReporter extends AbstractReporter { private def getUpgradesRows(Result result) { List rows = new ArrayList<>(); - // The following dependencies are using the latest milestone version: DependenciesGroup list = result.getOutdated() - rows.add("") + rows.add("") + rows.add("") for (DependencyOutdated item : list.dependencies) { String rowString; String rowStringFmt = "" rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), getUrlString(item.getProjectUrl()), getVersionString(item.getGroup(), item.getName(), item.getVersion()), - getVersionString(item.getGroup(), item.getName(), item.getAvailable().getMilestone())) + getVersionString(item.getGroup(), item.getName(), getDisplayableVersion(item))) rows.add(rowString) } return rows } + private def String getDisplayableVersion(DependencyOutdated item) { + if (getRevision().equalsIgnoreCase("release-candidate")) { + return item.getAvailable() + } else if (getRevision().equalsIgnoreCase("release")) { + return item.getVersion() + } + return "" + } + + private def String getDisplayableVersion(Dependency item) { + return item.getVersion() + } + private def writeUnresolved(printStream, Result result) { SortedSet versions = result.getUnresolved().getDependencies(); if (!versions.isEmpty()) { - // '\nFailed to determine the latest version for the following dependencies ' - // + '(use --info for details):') printStream.println("

Unresolved dependencies

") printStream.println("

Failed to determine the latest version for the following dependencies:

") printStream.println("

NameGroupURLCurrent VersionLatest Version
Later dependencies(Click to collapse)
NameGroupURLCurrent VersionLatest Version
%s%s%s%s%s
") @@ -193,14 +226,14 @@ class HtmlReporter extends AbstractReporter { private def getUnresolvedRows(Result result) { List rows = new ArrayList<>(); - // The following dependencies are using the latest milestone version: DependenciesGroup list = result.getUnresolved() - rows.add("") + rows.add("") + rows.add("") for (DependencyUnresolved item : list.dependencies) { String rowString; String rowStringFmt = "" rowString = String.format(rowStringFmt, item.getName(), item.getGroup(), - getUrlString(item.getProjectUrl()) , getVersionString(item.getGroup(), item.getName(), item.getVersion())) + getUrlString(item.getProjectUrl()) , getVersionString(item.getGroup(), item.getName(), getDisplayableVersion(item))) rows.add(rowString) } return rows @@ -228,25 +261,37 @@ class HtmlReporter extends AbstractReporter { } // print Gradle updates in breadcrumb format - printStream.print("

Gradle: [" + running.version) + printStream.print("

Gradle: [" + getGradleVersionUrl(running.version)) boolean updatePrinted = false if (current.isUpdateAvailable && current > running) { updatePrinted = true - printStream.print(" -> " + current.version) + printStream.print(" -> " + getGradleVersionUrl(current.version)) } if ((gradleReleaseChannel == RELEASE_CANDIDATE.id || gradleReleaseChannel == NIGHTLY.id) && releaseCandidate.isUpdateAvailable && releaseCandidate > current) { updatePrinted = true - printStream.print(" -> " + releaseCandidate.version) + printStream.print(" -> " + getGradleVersionUrl(releaseCandidate.version)) } if (gradleReleaseChannel == NIGHTLY.id && nightly.isUpdateAvailable && nightly > current) { updatePrinted = true - printStream.print(" -> " + nightly.version) + printStream.print(" -> " + getGradleVersionUrl(nightly.version)) } if (!updatePrinted) { printStream.print(": UP-TO-DATE") } printStream.println("]

") + printStream.println(getGradleUrl()) + } + } + + private def getGradleUrl() { + return "

For information about Gradle releases click here."; + } + + private def getGradleVersionUrl(String version) { + if (version == null) { + return "https://gradle.org/releases/"; } + return String.format("%s", version, version) } private def getUrlString(String url) { From 449a944bb7473b3100b538959a0a2e265a0e7154 Mon Sep 17 00:00:00 2001 From: John Rokicki Date: Fri, 4 Sep 2020 14:45:19 -0400 Subject: [PATCH 3/4] bump version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1121fb4a..d66ac574 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ apply plugin: 'nexus' apply plugin: 'codenarc' group = 'com.github.ben-manes' -version = '0.29.0' +version = '0.30.0' sourceCompatibility = '1.8' From 0d9e4a29d57f42047b7e7207e106ad724dfa595e Mon Sep 17 00:00:00 2001 From: John Rokicki Date: Fri, 4 Sep 2020 18:39:32 -0400 Subject: [PATCH 4/4] fix last review comments --- examples/groovy/build.gradle | 3 ++- .../gradle/versions/reporter/HtmlReporter.groovy | 12 +++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/groovy/build.gradle b/examples/groovy/build.gradle index 6a58dc15..c03627f5 100644 --- a/examples/groovy/build.gradle +++ b/examples/groovy/build.gradle @@ -66,7 +66,8 @@ dependencies { 'com.google.code.gson:gson', 'dom4j:dom4j' upToDate 'backport-util-concurrent:backport-util-concurrent:3.1', - 'backport-util-concurrent:backport-util-concurrent-java12:3.1' + 'backport-util-concurrent:backport-util-concurrent-java12:3.1', + 'org.openjdk.jmh:jmh-parent:1.25.2' exceedLatest 'com.google.guava:guava:99.0-SNAPSHOT', 'com.google.guava:guava-tests:99.0-SNAPSHOT' upgradesFound 'com.google.guava:guava:15.0', diff --git a/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy b/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy index 4e01fb00..9a930499 100644 --- a/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy +++ b/src/main/groovy/com/github/benmanes/gradle/versions/reporter/HtmlReporter.groovy @@ -200,10 +200,12 @@ class HtmlReporter extends AbstractReporter { } private def String getDisplayableVersion(DependencyOutdated item) { - if (getRevision().equalsIgnoreCase("release-candidate")) { - return item.getAvailable() + if (getRevision().equalsIgnoreCase("milestone")) { + return item.getAvailable().getMilestone() } else if (getRevision().equalsIgnoreCase("release")) { return item.getVersion() + } else if (getRevision().equalsIgnoreCase("integration")) { + return item.getAvailable().getIntegration() } return "" } @@ -308,12 +310,12 @@ class HtmlReporter extends AbstractReporter { } private def getMvnVersionString(String group, String name, String version) { - // https://mvnrepository.com/artifact/com.azure/azure-core-http-netty/1.5.4 + // https://search.maven.org/artifact/com.azure/azure-core-http-netty/1.5.4 if (version == null) { return ""; } - String versionUrl = String.format("https://mvnrepository.com/artifact/%s/%s/%s", group, name, version) - return String.format("%s", versionUrl, "Mvn") + String versionUrl = String.format("https://search.maven.org/artifact/%s/%s/%s/bundle", group, name, version) + return String.format("%s", versionUrl, "Sonatype") } private def getBintrayVersionString(String group, String name, String version) {

NameGroupURLCurrent Version
Unresolved dependencies(Click to collapse)
NameGroupURLCurrent Version
%s%s%s%s