Sbt 扩展配置的作用是什么?
在SBT中,我创建了一个名为Sbt 扩展配置的作用是什么?,sbt,Sbt,在SBT中,我创建了一个名为katebush的新配置,如下所示: lazy val KateBush: Configuration = config("katebush") lazy val KateBush: Configuration = config("katebush") extend Compile inConfig(KateBush)(Defaults.compileSettings) 当我试图运行katebush:compile时,我得到一个错误。这就是我所期望的 >
katebush
的新配置,如下所示:
lazy val KateBush: Configuration = config("katebush")
lazy val KateBush: Configuration = config("katebush") extend Compile
inConfig(KateBush)(Defaults.compileSettings)
当我试图运行katebush:compile
时,我得到一个错误。这就是我所期望的
> katebush:compile
[error] No such setting/task
[error] katebush:compile
[error] ^
现在我在我的配置定义中扩展了Compile
,我希望从继承的范围中获取编译
lazy val KateBush: Configuration = config("katebush") extend Compile
除非它不起作用:
> katebush:compile
[error] No such setting/task
[error] katebush:compile
[error] ^
但是如果我将默认值添加到配置中(在build.sbt
中),那么它看起来如下所示:
lazy val KateBush: Configuration = config("katebush")
lazy val KateBush: Configuration = config("katebush") extend Compile
inConfig(KateBush)(Defaults.compileSettings)
它工作得很好:
> katebush:compile
[info] Updating {file:/Users/jacek/sandbox/so-25596360/}so-25596360...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[success] Total time: 0 s, completed Aug 31, 2014 11:35:47 PM
因此,我的问题是,
为配置扩展了什么?免责声明我对sbt的配置
概念有了相当基本的理解
tl;dr扩展配置只是为了继承依赖项组,而不是设置
从以下来源:
默认情况下,extendsConfigs
为Nil
,可以在对象中看到:
(注意Nil
)
在:
这就是config
概念的支持在sbt和Ivy步骤中结束的地方。那就是你必须看常春藤的文件的地方
但在此之前,请阅读其中的内容:
这是一个示例。scala构建定义演示了如何使用Ivy
组依赖项的配置
这就是解释的开始。常春藤配置用于对依赖项进行分组,extend
ing配置用于扩展分组
发件人:
配置是使用或构造模块的一种方式。(…)
模块可能只在构建时需要一些其他模块和工件,而在运行时需要一些其他模块和工件。所有这些使用或构建模块的不同方式都在常春藤模块配置中调用
一直读下去,你可以找到你问题的答案(我自己也还没有消化):
配置还可以扩展同一配置的一个或多个其他配置
模块。当一个配置扩展另一个配置时,所有工件
在扩展配置中需要,在
扩展另一个的配置。例如,如果
配置B扩展了配置A,如果工件art1和
配置A中需要art2,然后将自动
配置B中需要。另一方面,配置B中需要工件
配置A中不一定需要配置B
这个概念非常有助于定义相似的配置
有些不同
在页面底部,有一个示例部分,其中有一个带有运行时
配置的示例,“运行时将由所有依赖项组成,所有依赖项都是可传递的,包括仅在compile中声明的依赖项。”
有了这一点,您现在可以理解sbt中的config
概念作为依赖项组,而Compile
中的分组内容在运行时
中提供为:
我刚刚必须弄清楚这一点,所以我认为这是值得澄清的。必须将配置添加到项目中,以便授权到扩展配置中:
lazy val KateBush: Configuration = config("katebush") extend Compile
lazy val root = (project in file(".")).configs(KateBush)
会很好的。如果你
inspect katebush:compile
然后,您可以查看委派链:
...
[info] Delegates:
[info] katebush:compile
[info] compile:compile
[info] *:compile
[info] {.}/katebush:compile
[info] {.}/compile:compile
[info] {.}/*:compile
[info] */katebush:compile
[info] */compile:compile
[info] */*:compile
...
非常好的回答,谢谢。我只是很失望,你还指望什么?设置是sbt,而配置来自Ivy。也许sbt可以做得更多,但它们是不同的概念——配置(Ivy/依赖项)和作用域(sbt/名称空间)。我希望配置从父配置继承任务/设置。这是SBT-我不在乎常春藤在引擎盖下做什么,我也不应该。我能理解这个看台。我现在更愿意遵循sbt的规则,直到我最终彻底掌握了所有的概念。
lazy val KateBush: Configuration = config("katebush") extend Compile
lazy val root = (project in file(".")).configs(KateBush)
inspect katebush:compile
...
[info] Delegates:
[info] katebush:compile
[info] compile:compile
[info] *:compile
[info] {.}/katebush:compile
[info] {.}/compile:compile
[info] {.}/*:compile
[info] */katebush:compile
[info] */compile:compile
[info] */*:compile
...