Sbt 当retrieveManaged为true时,如何跳过检索提供范围中的依赖项?

Sbt 当retrieveManaged为true时,如何跳过检索提供范围中的依赖项?,sbt,Sbt,只要我在build.sbt中设置retrieveManaged:=true,sbt似乎总是检索所有依赖项 我有一些配置为提供的依赖项,我不需要将它们检索到lib\u managed/目录中 如何告知sbt?提供的模块配置的目的是: 这很像compile,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为Java Enterprise Edition构建web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为web容器提供了这些类。此范围仅

只要我在
build.sbt
中设置
retrieveManaged:=true
,sbt似乎总是检索所有依赖项

我有一些配置为
提供的依赖项
,我不需要将它们检索到
lib\u managed/
目录中


如何告知sbt?

提供的
模块配置的目的是:

这很像compile,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为Java Enterprise Edition构建web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为web容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不可传递

From(SBT使用Ivy,在本例中它重用Maven的约定)


retrieveManaged:=true
的目的是:

将构建与正在清除的常春藤缓存隔离


因此,我认为,
提供的
依赖项仍然在
retrieveManaged:=true
下检索到
lib_managed
是有意义的


也许你想把它作为捆绑应用程序的一种方式(包括处理
提供的
依赖项),而不是使用
retrieveManaged

经过几天的搜索,我找到了一个完全符合我要求的sbt插件


尽管它不是关于lib_managed的,但它将所有依赖项检索到target/pack/lib中,而不提供那些依赖项。目标/包可以直接分发,无需无用的jar。这正是我需要的。

谢谢。我明白为什么会这样。但我仍然陷于这种情况:当我部署我的项目时,我调用
sbt-package
,并从libu-managed中归档所有jar。问题是,例如,我正在从事一个spark项目,spark core本身依赖于相当多的JAR,这些JAR从未在运行时环境中使用过。我不想将那些JAR归档到我的部署包中,这会使我的包膨胀。有什么建议吗?我没有使用Spark的经验,但从谷歌上看,你可能想要sbt组装。它谈到了一些专门提供和火花:谢谢。sbt程序集do可以排除提供的依赖项。这很好,或多或少解决了我的问题,但是它产生了一个胖罐子,这不是我想要的。你如何触发下载?您使用什么命令/任务将DEP下载到
lib_managed
?您能否举例说明如何配置sbt pack以复制(或符号链接)未提供的依赖项?