Scala 禁止使用自动导入依赖项的SBT插件
我的Scala 禁止使用自动导入依赖项的SBT插件,scala,sbt,Scala,Sbt,我的build.sbt文件中有这行代码: libraryDependencies ++= Seq("com.foo" %% "lib" % "1.2.3") 假设这个库依赖于“com.bar.lib”库。现在在我的代码中,我可以导入com.bar.lib.\u并且它会工作。但我不想编译这个,所以可能有SBT插件就是为了这个目的 我使用的一个库依赖于旧的cats版本。我花了很长时间来理解为什么mapN方法不起作用。。。我只是从来没有在子项目中导入过更新版本的cats。SBT提供了不及物和排除功能
build.sbt
文件中有这行代码:
libraryDependencies ++= Seq("com.foo" %% "lib" % "1.2.3")
假设这个库依赖于“com.bar.lib”库。现在在我的代码中,我可以导入com.bar.lib.\u
并且它会工作。但我不想编译这个,所以可能有SBT插件就是为了这个目的
我使用的一个库依赖于旧的
cats
版本。我花了很长时间来理解为什么mapN方法不起作用。。。我只是从来没有在子项目中导入过更新版本的cats。SBT提供了不及物和排除功能来处理此类问题,正如@earldouglas指出的那样。见:
你回答说:
我尝试过这样做,但intransitive()不导入可传递依赖项(因此我需要手动导入所有依赖项以使其可编译)
是的,这就是它的目的
我想要的是警告我不要使用SBT文件中未直接导入的库
因此,您希望类路径上存在可传递依赖项,但希望编译器拒绝在项目代码中使用可传递类,同时允许它们在库代码中使用
这不是一种明智的方法:在运行时,这些可传递的依赖项将位于类路径上。JVM类路径不区分不同类型的依赖关系;这种区别只存在于构建时的SBT中
两种选择中的任何一种都会为你提供更好的服务
- 包括更新版本的
cats
库,覆盖可传递的dep或
- 排除传递包含的
cats
库(如果已损坏)
但是,我认为通过在不同的构建阶段设置不同的依赖项,您可能可以实现您想要的:
在Compile
阶段,使用intransitive
包含依赖项。您的代码应该针对直接依赖项进行编译,但如果您引用了任何可传递依赖项,则会失败
在运行时
阶段,包括依赖项及其可传递的dep
SBT代码可能如下所示(未测试):
您是否尝试过使用不及物
或排除
?请参阅:我尝试过这样做,但是intransitive()
不导入可传递依赖项(因此我需要手动导入所有依赖项以使其可编译)。我想要的是警告我不要使用SBT文件中未直接导入的库。
(libraryDependencies in Compile) ++= Seq("com.foo" %% "lib" % "1.2.3" intransitive())
(libraryDependencies in Runtime) ++= Seq("com.foo" %% "lib" % "1.2.3")