Sbt 插件在 bintray 上的发布和解析,不同的路径(sbt-bintray 插件)

Posted

技术标签:

【中文标题】Sbt 插件在 bintray 上的发布和解析,不同的路径(sbt-bintray 插件)【英文标题】:Sbt plugin publication and resolution on bintray, different paths (sbt-bintray plugin) 【发布时间】:2017-03-01 23:41:20 【问题描述】:

我在发布/使用来自 bintray 的自定义 sbt 插件时遇到了一些麻烦。我能 在 bintray 上发布 sbt-plugin 但是当我尝试使用它时,解析器使用 另一条路。

我遵循了official guide,但将其调整为最新版本的插件,我将这个build.sbt 放入我的插件中:

lazy val commons = Seq(
  organization in ThisBuild := "me.my.app",
  version in ThisBuild := "0.1.0"
)

lazy val root = (project in file(".")).
  settings(commons ++ BintrayPlugin.bintrayPublishSettings: _*).
  settings(
    sbtPlugin := true,
    name := "sbt-plugin",
    description := "Share configuration and plugins accros app projects",
    bintrayOmitLicense := true,
    publishMavenStyle := false,
    bintrayRepository := "sbt-plugins",
    bintrayOrganization := None
  ).
  settings(
    addSbtPlugin("me.lessis" % "bintray-sbt" % "0.3.0"),
    addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.6.0"),
    addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % "0.8.0")
  )

sbt-plugin> publish 任务成功完成并将我的插件发布到 me.my.app/sbt-plugin/scala_2.10/sbt_0.13/0.1.0/jars/sbt-plugin.jar

然后我将addSbtPlugin("me.my.app" % "sbt-plugin" % "0.1.0") 添加到my-project\project\plugins.sbt 和 重新加载它。但他失败了

[warn] ==== bintray-organization-repo: tried
[warn]   https://dl.bintray.com/organization/sbt-plugins/me/my/app/sbt-plugin_2.10_0.13/0.1.0/sbt-plugin-0.1.0.pom
...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: me.my.app#sbt-plugin;0.1.0: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]      me.my.app:sbt-plugin:0.1.0 (scalaVersion=2.10, sbtVersion=0.13)
[warn]
[warn]  Note: Unresolved dependencies path:
[warn]      me.my.app:sbt-plugin:0.1.0 (scalaVersion=2.10, sbtVersion=0.13) (/home/me/Projects/app/app-web/project/plugins.sbt#L7-8)
[warn]        +- default:app-web-build:0.1-SNAPSHOT (scalaVersion=2.10, sbtVersion=0.13)
sbt.ResolveException: unresolved dependency: me.my.app#sbt-plugin;0.1.0: not found
 at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:313)
[error] (*:update) sbt.ResolveException: unresolved dependency: me.my.app#sbt-plugin;0.1.0: not found

如您所见,用于下载插件的 URL 与 插件已发布的地方。 (publishLocal 我的插件是 在同一路径下发布但成功解析。

本地:me.my.app/sbt-plugin/scala_2.10/sbt_0.13/0.1.0/jars/sbt-plugin.jar 上传:me.my.app/sbt-plugin/scala_2.10/sbt_0.13/0.1.0/jars/sbt-plugin.jar 下载:me/my/app/sbt-plugin_2.10_0.13/0.1.0/sbt-plugin-0.1.0.pom

我尝试过使用或不使用publishMavenStyle := false 以及使用Resolver.bintrayRepoResolver.bintrayIvyRepo,但没有成功。

我会错过一些东西,但我不得不承认我感到有些失落。那么应该对齐 uploaddownload 路径的缺失配置是什么?

详情:

publishMavenStyle := false -> me.my.app/sbt-plugin/scala_2.10/sbt_0.13/0.1.0/jars/sbt-plugin.jar

publishMavenStyle := true -> me.my.app/sbt-plugin/scala_2.10/sbt_0.13/0.1.0/jars/sbt-plugin.jar

Resolver.bintrayRepo -> me/my/app/sbt-plugin_2.10_0.13/0.1.0/sbt-plugin-0.1.0.pom

Resolver.bintrayIvyRepo -> me.my.app/sbt-plugin/scala_2.10/sbt_0.13/0.1.0/ivys/ivy.xml

【问题讨论】:

【参考方案1】:

发布部分没问题。唯一的问题是在分辨率方面。

我必须将带有显式 ivyStylePatterns 解析器的自定义解析器添加到 my-project\build.sbt

resolvers += Resolver.url("me @ bintray", url("https://dl.bintray.com/my-bintray-account/my-bintray-generic-repo"))(Resolver.ivyStylePatterns)

【讨论】:

以上是关于Sbt 插件在 bintray 上的发布和解析,不同的路径(sbt-bintray 插件)的主要内容,如果未能解决你的问题,请参考以下文章

我如何获得sbt来解决我的双层托盘依赖关系(sbt 1.3.5)?

激活器依赖错误

使用 sbt-native-packager 发布到 bintray 一个 zip 文件

与证书相关的 SBT 项目编译错误

在哪里可以找到下载的 sbt 插件?

SBT 不支持自定义解析器