Dependencies 如何解决SBT依赖项的依赖冲突?

Dependencies 如何解决SBT依赖项的依赖冲突?,dependencies,sbt,Dependencies,Sbt,我有一个项目的build.sbt正在使用: libraryDependencies ++= Seq( "com.lerestau" % "killer-launcher" % "1.0.2", "com.lerestau" % "menu-starter" % "1.0.0" ) 菜单启动程序可通过过渡方式下载“killer launcher”%%“0.0.8”,因此在当前项目中会出现错误。有没有办法解决这种冲突。我提出了依赖性覆盖,但如果冲突完全是二进制的,那么这就行了。那没用。

我有一个项目的build.sbt正在使用:

libraryDependencies ++= Seq(
   "com.lerestau" % "killer-launcher" % "1.0.2",
   "com.lerestau" % "menu-starter" % "1.0.0"
)

菜单启动程序可通过过渡方式下载“killer launcher”%%“0.0.8”,因此在当前项目中会出现错误。有没有办法解决这种冲突。我提出了依赖性覆盖,但如果冲突完全是二进制的,那么这就行了。那没用。如何解决SBT中的问题?

以下内容应消除旧killer launcher版本上菜单启动程序的传递依赖性:

libraryDependencies ++= Seq(
  "com.lerestau" % "killer-launcher" % "1.0.2",
  "com.lerestau" % "menu-starter" % "1.0.0" exclude("com.lerestau", "killer-launcher"
)  

遗憾的是,在中可以找到更多详细信息,似乎没有直接链接到相关章节的方法。

我使用的是新版本(即1.0.2)中定义的
类,但旧版本(0.0.8)中没有该类。如果我
排除(“com.lerestau”,“killer launcher”)
,它将抛出
NoClassDefFoundError
,就像我的例子中抛出的那样。menu-starter只包括0.8版,因此排除该版本不会产生影响,除非根据我对您的理解,menu-starter依赖于仅在0.8中可用的接口“排除不应该对我的项目产生影响的因素”,这对于编译来说是正确的。但是在构建时,当我试图运行它时,得到了这个“NoClassDefFoundError”“指向
com/lerestau/killer launcher/launcher$NewLauncher
。该新启动器在版本1.0.2中,但在0.0.8中不存在。默认情况下,Sbt将选择最后一个版本。在这种方法不起作用的情况下(我们遇到的例子:有人在库中包括slf4j classic),消除“坏”依赖应该可以解决这个问题。但是,如果两者都对各自的版本有硬依赖,并且这些版本基本上不兼容,那么我看不出任何工具(无论是Sbt、Maven、Gradle还是其他工具)如何合理地解决这一冲突。也许一个简单的解释可以提供清晰的信息。