Open julienrf opened 4 years ago
One solution is to print some kind of summary, probably at the end. The summary could contain the list of offending JARs, so that it is easy to suppress them. For that purpose, it should also include the namespace/groupid of the JARs. It could be handy if the output also contained the code to add to sbt config to do the suppressing, similarly as to what MiMa does. It could look like this
Missinglink summary: There have been found x conflicts coming from 3 JARs. If you think that those are false positives, you can suppress them like this:
missinglinkExcludedDependencies ++= List(
moduleFilter(organization = "ch.qos.logback", name = "logback-classic"),
moduleFilter(organization = "ch.qos.logback", name = "logback-core"),
moduleFilter(organization = "org.slf4j", name = "slf4j-api")
)
Running
missinglinkCheck
typically returns a huge list of errors:Example of output
~~~ [error] Category: Method being called not found [error] In artifact: scala-reflect-2.12.8.jar [error] In class: scala.reflect.internal.JDK9Reflectors [error] In method: runtimeVersionMajor(java.lang.Object):52 [error] Call to: java.lang.invoke.MethodHandle.invoke(java.lang.Object) [error] Problem: Method not found: java.lang.invoke.MethodHandle.invoke(java.lang.Object) [error] Found in: rt.jar [error] -------- [error] In method: newJarFile(java.io.File, boolean, int, java.lang.Object):62 [error] Call to: java.lang.invoke.MethodHandle.invoke(java.io.File, boolean, int, java.lang.Object) [error] Problem: Method not found: java.lang.invoke.MethodHandle.invoke(java.io.File, boolean, int, java.lang.Object) [error] Found in: rt.jar [error] -------- [error] In method: runtimeVersion():44 [error] Call to: java.lang.invoke.MethodHandle.invoke() [error] Problem: Method not found: java.lang.invoke.MethodHandle.invoke() [error] Found in: rt.jar [error] -------- [error] In method: runtimeVersionParse(java.lang.String):36 [error] Call to: java.lang.invoke.MethodHandle.invoke(java.lang.String) [error] Problem: Method not found: java.lang.invoke.MethodHandle.invoke(java.lang.String) [error] Found in: rt.jar [error] -------- [error] In class: scala.reflect.internal.util.StatisticsStatics [error] In method: areSomeColdStatsEnabled():43 [error] Call to: java.lang.invoke.MethodHandle.invokeExact() [error] Problem: Method not found: java.lang.invoke.MethodHandle.invokeExact() [error] Found in: rt.jar [error] -------- [error] In method: areSomeHotStatsEnabled():47 [error] Call to: java.lang.invoke.MethodHandle.invokeExact() [error] Problem: Method not found: java.lang.invoke.MethodHandle.invokeExact() [error] Found in: rt.jar [error] -------- [error] In class: scala.reflect.internal.util.ScalaClassLoader$ [error] In method: liftedTree1$1():167 [error] Call to: java.lang.invoke.MethodHandle.invoke() [error] Problem: Method not found: java.lang.invoke.MethodHandle.invoke() [error] Found in: rt.jar [error] -------- [error] In artifact: grpc-netty-shaded-1.24.0.jar [error] In class: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger [error] In method: log(io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLogLevel, java.lang.String, java.lang.Object, java.lang.Object):109 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Object, java.lang.Object) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Object, java.lang.Object) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: warn(java.lang.Throwable):84 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: error(java.lang.Throwable):89 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: log(io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLogLevel, java.lang.Throwable):124 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: log(io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLogLevel, java.lang.String):99 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: isEnabled(io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLogLevel):94 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.isEnabled(org.apache.logging.log4j.Level) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.isEnabled(org.apache.logging.log4j.Level) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: trace(java.lang.Throwable):69 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: log(io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLogLevel, java.lang.String, java.lang.Throwable):119 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: debug(java.lang.Throwable):74 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: info(java.lang.Throwable):79 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Throwable) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: log(io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLogLevel, java.lang.String, java.lang.Object):104 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Object) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Object) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: log(io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLogLevel, java.lang.String, java.lang.Object[]):114 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Object[]) [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.log(org.apache.logging.log4j.Level, java.lang.String, java.lang.Object[]) [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In method: name():64 [error] Call to: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.getName() [error] Problem: Method not found: io.grpc.netty.shaded.io.netty.util.internal.logging.Log4J2Logger.getName() [error] Found in: grpc-netty-shaded-1.24.0.jar [error] -------- [error] In artifact: enumeratum-circe_2.12-1.5.21.jar [error] In class: enumeratum.Circe$$anon$6 [error] In method: accumulating():60 [error] Call to: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Problem: Method not found: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Found in: circe-core_2.12-0.12.3.jar [error] -------- [error] In class: enumeratum.Circe$$anon$5 [error] In method: accumulating():48 [error] Call to: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Problem: Method not found: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Found in: circe-core_2.12-0.12.3.jar [error] -------- [error] In class: enumeratum.Circe$$anon$7 [error] In method: accumulating():72 [error] Call to: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Problem: Method not found: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Found in: circe-core_2.12-0.12.3.jar [error] -------- [error] In class: enumeratum.Circe$$anon$4 [error] In method: accumulating():36 [error] Call to: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Problem: Method not found: io.circe.Decoder.accumulating$(io.circe.Decoder) [error] Found in: circe-core_2.12-0.12.3.jar [error] -------- [error] Category: Class being called not found [error] In artifact: logback-core-1.2.3.jar [error] In class: ch.qos.logback.core.boolex.JaninoEventEvaluatorBase [error] In method: evaluate(java.lang.Object):69 [error] Call to: org.codehaus.janino.ScriptEvaluator.evaluate(java.lang.Object[]) [error] Problem: Class not found: org.codehaus.janino.ScriptEvaluator [error] -------- [error] In method: start():57 [error] Call to: org.codehaus.janino.ScriptEvaluator.We should find a way to present a more concise report to the user. One way of doing it might be to group the problems by class/method, so that the same class/method is not listed more than once.