【问题标题】:different import handling strategy for library and plugin dependency in sbtsbt 中库和插件依赖项的不同导入处理策略
【发布时间】: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 个问题。

  1. 为什么库依赖需要 scala 版本,而插件依赖不需要。修复它花了几个小时。不一致。

  2. 当我使用sbt发布任务时,会附加scala版本和sbt版本,我可以自定义它以摆脱它吗?

  3. 这完全不相关,build.sbt 和 plugins.sbt 中的解析器是相同还是不同。我问的原因是当我尝试重新加载时,plugins.sbt 中的解析器已验证,而 sbt 更新时,build.sbt 中的解析器已验证

感谢任何答案或解决方案。 :)

【问题讨论】:

    标签: scala sbt


    【解决方案1】:
    1. 插件是针对特定的 sbt 版本编译的,它使用特定的 Scala 版本。因此addSbtPlugin 将在后台添加一个 sbt 和 Scala 版本。

    2. 你真的不应该这样做,因为第一个。您的插件是针对特定版本的 Scala 和 sbt 编译的,因此会附加此值。

    3. Sbt is recursivebuild.sbt 中定义的解析器用于构建您的项目,project/plugins.sbt 中的解析器用于构建您的项目的构建定义。

    【讨论】:

      猜你喜欢
      • 2016-03-05
      • 2013-07-06
      • 2018-12-01
      • 2011-12-16
      • 2017-08-19
      • 2013-06-01
      • 2016-12-11
      • 2014-12-11
      • 2019-07-14
      相关资源
      最近更新 更多