只要我在retrieveManaged := true
中设置build.sbt
,sbt似乎总是会检索所有依赖项。
我有一些依赖项配置为provided
,我不需要将它们检索到目录lib_managed/
。
如何告诉sbt?
答案 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
的目的是:
将您的构建与正在清除的常春藤缓存隔离
因此,我认为provided
下的lib_managed
依赖关系仍被retrieveManaged := true
检索到provided
。
或许您希望将sbt-assembly视为捆绑应用程序的方式(包括处理retrieveManaged
依赖项),而不是使用{{1}}。