sbt中库和插件依赖的不同导入处理策略

时间:2014-07-14 08:03:05

标签: scala sbt

最近,我发现了一个有趣的sbt问题。我很难用几句话来描述它,所以这里有几个步骤。

我有一些用于部署的scala任务。我将它发布到我们当地的nexus repo中,因此有几个项目可以使用它。以下是内部nexus repo的截图

enter image description here

因此,我将它放入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&#34 ;)

未解决的依赖关系失败

但如果我根本不使用scala和sbt版本,那就没关系了。

addSbtPlugin(" sbt.liquibase"%" sbt-liquibase-deploy "%" 1.0-3")//成功

我有3个问题。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

  1. 插件是针对特定的sbt版本编译的,该版本使用特定的Scala版本。因此,addSbtPlugin将添加一个sbt和Scala版本。

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

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