【发布时间】:2016-03-30 22:38:07
【问题描述】:
我遇到了从我的 corp nexus 获取插件依赖项的问题。具体来说,似乎 addSbtPlugin 的解析器正在路径中寻找 scala 版本和 sbt 版本,但我找不到在 nexus 工件上传选项中指定的方法。
我的 plugins.sbt 中定义了以下插件:
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8")
// web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.0.0")
我还有以下用于存储库配置的 .sbt-repositories 文件:
[repositories]
nexus1: https://nexus.somecorp.com/nexus1/content/repositories/central/content/
nexus2: https://nexus.somecorp.com/nexus2/content/repositories/central/content/
我是这样运行 sbt 的:
sbt run -Dsbt.override.build.repos=true -Dsbt.repository.config=.sbt-repositories
我所有的常规库依赖项都可以正常下载,但是通过 addSbtPlugin 添加的 sbt 插件不能 - 他们正在寻找不存在的工件的路径(scala 版本和 sbt 版本)。
例如:
[warn] module not found: com.typesafe.play#sbt-plugin;2.3.8
[warn] ==== nexus1: tried
[warn] https://nexus.somecorp.com/nexus1/content/repositories/central/content/com/typesafe/play/sbt-plugin_2.10_0.13/2.3.8/sbt-plugin-2.3.8.pom
不起作用,因为 pom 文件的正确路径应该是:
https://nexus.somecorp.com/nexus1/content/repositories/central/content/com/typesafe/play/sbt-plugin_2.10_0.13/2.3.8/sbt-plugin_2.10_0.13-2.3.8.pom
我还尝试使用 ivy 的参数将特定的解析器添加到我的 .sbt-repositories 文件中:
nexus1: https://nexus.somecorp.com/nexus1/content/repositories/central/content/, [organization]/[module]_[scalaVersion]_[sbtVersion]/[revision]/[module]_[scalaVersion]_[sbtVersion]-[artifact](-[classifier]).[ext]
但这也不起作用,原因有两个:
- [组织] 解析为 ex。 com.typesafe.play 不适合 nexus 的 com/typesafe/play
- 我什至尝试对组织值进行硬编码,但随后 sbt 抱怨工件的 pom 文件与 sbt 和 scala 版本不匹配(尚未找到在 nexus 或 pom 文件中指定这些内容的方法)
- .[ext] 解析为常春藤的 .xml
我如何使用 sbt 插件和我的仓库?
万一这很重要,我正在使用 sbt 0.13,并且现在已经多次阅读 sbt 文档来尝试解决这个问题。
【问题讨论】: