最近,我发现了一个有趣的sbt问题。我很难用几句话来描述它,所以这里有几个步骤。
我有一些用于部署的scala任务。我将它发布到我们当地的nexus repo中,因此有几个项目可以使用它。以下是内部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&#34 ;)
未解决的依赖关系失败
但如果我根本不使用scala和sbt版本,那就没关系了。
addSbtPlugin(" sbt.liquibase"%" sbt-liquibase-deploy "%" 1.0-3")//成功
我有3个问题。
为什么库依赖项需要scala版本,而插件依赖项则不需要。修复它花了几个小时。这不一致。
当我使用sbt发布任务时,会附加scala版本和sbt版本,我可以自定义它以摆脱它。
这完全不相关,build.sbt和plugins.sbt中的解析器是相同还是不同。我问的原因看起来当我尝试重新加载时,插件中的解析器已经过验证,而sbt更新,build.sbt中的解析器已经过验证
感谢任何答案或解决方案。 :)
答案 0 :(得分:2)
插件是针对特定的sbt版本编译的,该版本使用特定的Scala版本。因此,addSbtPlugin
将添加一个sbt和Scala版本。
你真的不应该这样做,因为第一个。您的插件是针对特定版本的Scala和sbt编译的,因此会附加此值。
Sbt is recursive和build.sbt
中定义的解析器是为构建项目而定义的,project/plugins.sbt
中的解析器用于构建项目的构建定义。