Dependencies 如何解决SBT依赖项的依赖冲突?
我有一个项目的build.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”,因此在当前项目中会出现错误。有没有办法解决这种冲突。我提出了依赖性覆盖,但如果冲突完全是二进制的,那么这就行了。那没用。
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还是其他工具)如何合理地解决这一冲突。也许一个简单的解释可以提供清晰的信息。