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

时间:2015-04-17 11:49:06

标签: sbt

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

我有一些依赖项配置为provided,我不需要将它们检索到目录lib_managed/

如何告诉sbt?

2 个答案:

答案 0 :(得分:4)

经过几天的搜索,我找到了一个完全符合我要求的sbt插件。 https://github.com/xerial/sbt-pack

虽然它不是lib_managed,但是它会将所有依赖项检索到target / pack / lib而不提供那些。目标/包可以直接分发而无需无用的罐子。这正是我所需要的。

答案 1 :(得分:1)

provided模块配置的目的是:

  

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

来自Maven's docs(SBT使用常春藤,在这种情况下重复使用Maven的惯例)。


retrieveManaged := true的目的是:

  

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

来自SBT's FAQs


因此,我认为provided下的lib_managed依赖关系仍被retrieveManaged := true检索到provided

或许您希望将sbt-assembly视为捆绑应用程序的方式(包括处理retrieveManaged依赖项),而不是使用{{1}}。