2016-11-24 89 views
2

我希望我的自動插件顯示一個設置,如果設置,則會導致≈5個其他設置也被設置爲相應的值。根據另一個設置的值在SBT自動插件中有條件地設置多個設置

具體地,如果下游構建設置一個非空shadedDeps

val shadedDeps = settingKey[Seq[ModuleID]]("When set, the main JAR produced will include these libraries shaded") 

然後我想自動設置幾個assembly - 相關設置(例如assemblyExcludedJarsassemblyJarNameartifactClassifier)。

我找不到方法來做到這一點,因爲AutoPlugin.projectSettings方法無法訪問shadedDeps.value(試圖這樣做給出了「value can only be used within a task or setting macro」錯誤)。

我想出是有我的插件還定義諸如設置最好:

val extraAssemblySettings = settingKey[Seq[Def.Setting[_]]]("…") 

,然後有條件加載與組裝的設置我想設置,然後評估

extraAssemblySettings 

下游項目'build.sbt。理想情況下,我可以跳過最後一步,只需設置shadedDeps觸發一切。

我的(非常天真的)關於SBT設置如何工作的心理模型的一些東西顯然是不對的,因爲這看起來應該是微不足道的,但我已經搜索了互聯網並且空洞起來。

+0

你能顯示所有相關的代碼嗎? – nafg

回答

0

在稍後的某個時候,我明白了這一點; this addSparkDeps block在我的廚房 - 水槽項目 - 樣板插件是一個咒語的例子,可以放置在下游build.sbt並展開到多個設置。 Here's an example usage