一个 sbt 插件如何设置另一个插件的设置然后调用另一个插件

Posted

技术标签:

【中文标题】一个 sbt 插件如何设置另一个插件的设置然后调用另一个插件【英文标题】:How can one sbt plugin set another plugin's settings then call that other plugin 【发布时间】:2015-04-30 19:32:40 【问题描述】:

我正在尝试扩充现有插件,我们称之为 A-Plugin。

A-Plugin 的主要任务使用mappings 设置。

但是设置映射设置对于我需要的东西来说是乏味的,并且可以完全自动化。所以我正在尝试编写一个插件来计算正确的mappings 设置设置mappings 然后调用A-Plugin 的主要任务。

我有一个计算映射的任务,但我不能用它初始化映射,因为设置不能依赖于任务,我也不知道如何从我的任务中调用 A-Plugin 的任务准备好了。

这听起来应该是command,但最佳实践插件指南说要避免在插件中创建命令。

我该怎么做?我是在正确的轨道上还是我应该使用其他成语?

现在我的一部分人在想我应该只公开函数来计算映射,并简单地将它留给插件用户来设置函数的映射..但是这将在 sbt 启动后立即运行.. . 而我需要在其他一些任务运行后运行它。

有人知道该怎么做吗?

谢谢

【问题讨论】:

【参考方案1】:

确实Plugins Best Practices 说通常会尽量避免首先使用命令。但是,如果您无法仅使用设置和任务来实现您想要的,那么您应该继续使用更大的锤子。

另请注意:

命令的一种合法使用可能是使用插件来访问构建定义本身而不是代码。 sbt-inspectr 是在成为检查树之前使用命令实现的。

在您的情况下,如果您尝试动态设置设置,然后执行任务,这有​​点像重新连接构建定义,所以我会考虑使用命令的候选者。你仍然要小心实现它以确保它可以处理多项目等。

【讨论】:

以上是关于一个 sbt 插件如何设置另一个插件的设置然后调用另一个插件的主要内容,如果未能解决你的问题,请参考以下文章

sbt插件 - 如何确保我的settingKey在其他一切之前解决?

SBT 插件可以嵌入来自另一个插件的任务吗?

如何将任务依赖项从另一个插件添加到我的 SBT 插件?

如何设置 sbt/scala/play 多模块项目,该项目将与 Intellij scala 插件一起正常工作

SBT插件——编译前执行自定义任务

多项目 sbt 插件中未定义设置的引用