sbt 中库和插件依赖项的不同导入处理策略
Posted
技术标签:
【中文标题】sbt 中库和插件依赖项的不同导入处理策略【英文标题】:different import handling strategy for library and plugin dependency in sbt 【发布时间】:2014-09-04 02:28:55 【问题描述】:最近,我发现了一个有趣的 sbt 问题。我很难用几句话来描述它,所以这里是我所做的几个步骤。
我有一些用于部署的 scala 任务。我将它发布到我们本地的 nexus repo 中,所以几个项目可以使用它。这是内部关系回购的屏幕截图
因此,我将其放入 build.sbt 文件中。
"sbt.liquibase" % "**sbt-liquibase-deploy_2.10" % "1.0-3"**
在这种情况下,我必须指定 scala 版本 2.10,如果我重新加载使用
"sbt.liquibase" % "**sbt-liquibase-deploy" % "1.0-3"**
它因未解决的依赖而失败,我对此很好。不过后来觉得这个任务应该是一个插件,所以可以在build.sbt文件中使用。我将设置 sbtPlugin:true 添加到任务中。在我发布之后,工件从 sbt-liquibase-deploy_2.10 更改为 sbt-liquibase-deploy_2.10_0.13。基本上,附加了 sbt 版本。
当我尝试添加插件来使用这些代码时
addSbtPlugin("sbt.liquibase" % "sbt-liquibase-deploy_2.10" % "1.0-3")
由于未解决的依赖关系而失败
addSbtPlugin("sbt.liquibase" % "sbt-liquibase-deploy_2.10_0.13" % "1.0-3")
它也因未解决的依赖关系而失败
但如果我根本不使用 scala 和 sbt 版本,那很好。
addSbtPlugin("sbt.liquibase" % "sbt-liquibase-deploy" % "1.0-3") //成功
我有 3 个问题。
为什么库依赖需要 scala 版本,而插件依赖不需要。修复它花了几个小时。不一致。
当我使用sbt发布任务时,会附加scala版本和sbt版本,我可以自定义它以摆脱它吗?
这完全不相关,build.sbt 和 plugins.sbt 中的解析器是相同还是不同。我问的原因是当我尝试重新加载时,plugins.sbt 中的解析器已验证,而 sbt 更新时,build.sbt 中的解析器已验证
感谢任何答案或解决方案。 :)
【问题讨论】:
【参考方案1】:插件是针对特定的 sbt 版本编译的,它使用特定的 Scala 版本。因此addSbtPlugin
将在后台添加一个 sbt 和 Scala 版本。
你真的不应该这样做,因为第一个。您的插件是针对特定版本的 Scala 和 sbt 编译的,因此会附加此值。
Sbt is recursive 和 build.sbt
中定义的解析器用于构建您的项目,project/plugins.sbt
中的解析器用于构建您的项目的构建定义。
【讨论】:
以上是关于sbt 中库和插件依赖项的不同导入处理策略的主要内容,如果未能解决你的问题,请参考以下文章
使用 sbt-assembly 来自单个项目的具有不同外部依赖项的多个可执行 jar 文件