vamsiampolu
vamsiampolu

Reputation: 6642

sbt fails to resolve a plugin as dependency

I have a plugin called MyPlugin which needs to update a value from another plugin. I have thus added that plugin as a dependency based on

Logging from an sbt plugin

Need to provide a SettingKey from a plugin I use in my sbt plugin

However, sbt fails to resolve the dependency fm-sbt-s3-resolver. What is the appropriate way of including the dependency on the project?

I have tried adding it to enablePlugins on MyPlugin's build.sbt as well as adding it to the dependencies like this:

libraryDependencies ++= Seq(
  "com.amazonaws" % "aws-java-sdk-sts" % amazonSDKVersion,
  "com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.17.0"
)

In MyPlugin.scala:

import fm.sbt.S3ResolverPlugin

object MyPlugin {
  override def requires = S3ResolverPlugin

  override lazy val globalSettings = Seq(
    resolvers += repos
    S3ResolverPlugin.autoImport.s3CredentialsProvider := s3CredentialsProviderChain
  )
}

I get this error from sbt:

I can find the project on this url on the Maven Central Repo.

module not found: com.frugalmechanic#fm-sbt-s3-resolver;0.17.0
[warn] ==== typesafe-ivy-releases: tried
[warn]   https://repo.typesafe.com/typesafe/ivy-releases/com.frugalmechanic/fm-sbt-s3-resolver/0.17.0/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.frugalmechanic/fm-sbt-s3-resolver/0.17.0/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /Users/localuser/.ivy2/local/com.frugalmechanic/fm-sbt-s3-resolver/0.17.0/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com/frugalmechanic/fm-sbt-s3-resolver/0.17.0/fm-sbt-s3-resolver-0.17.0.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /Users/localuser/.sbt/preloaded/com.frugalmechanic/fm-sbt-s3-resolver/0.17.0/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////Users/localuser/.sbt/preloaded/com/frugalmechanic/fm-sbt-s3-resolver/0.17.0/fm-sbt-s3-resolver-0.17.0.pom
[warn] ==== sonatype-public: tried
[warn]   https://oss.sonatype.org/content/repositories/public/com/frugalmechanic/fm-sbt-s3-resolver/0.17.0/fm-sbt-s3-resolver-0.17.0.pom
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.frugalmechanic#fm-sbt-s3-resolver;0.17.0: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]      com.frugalmechanic:fm-sbt-s3-resolver:0.17.0 (/Users/localuser/lendi/core/scala/lendi-plugin/build.sbt#L13-17)
[warn]        +- com.mypackage.my-plugin:0.0.6 (scalaVersion=2.12, sbtVersion=1.0)
[error] sbt.librarymanagement.ResolveException: unresolved dependency: com.frugalmechanic#fm-sbt-s3-resolver;0.17.0: not found
[error]     at sbt.internal.librarymanagement.IvyActions$.resolveAndRetrieve(IvyActions.scala:332)
[error]     at sbt.internal.librarymanagement.IvyActions$.$anonfun$updateEither$1(IvyActions.scala:208)
[error]     at sbt.internal.librarymanagement.IvySbt$Module.$anonfun$withModule$1(Ivy.scala:239)
[error]     at sbt.internal.librarymanagement.IvySbt.$anonfun$withIvy$1(Ivy.scala:204)
[error]     at sbt.internal.librarymanagement.IvySbt.sbt$internal$librarymanagement$IvySbt$$action$1(Ivy.scala:70)
[error]     at sbt.internal.librarymanagement.IvySbt$$anon$3.call(Ivy.scala:77)
[error]     at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:95)
[error]     at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:80)
[error]     at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:99)
[error]     at xsbt.boot.Using$.withResource(Using.scala:10)
[error]     at xsbt.boot.Using$.apply(Using.scala:9)
[error]     at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:60)
[error]     at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:50)
[error]     at xsbt.boot.Locks$.apply0(Locks.scala:31)
[error]     at xsbt.boot.Locks$.apply(Locks.scala:28)
[error]     at sbt.internal.librarymanagement.IvySbt.withDefaultLogger(Ivy.scala:77)
[error]     at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:199)
[error]     at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:196)
[error]     at sbt.internal.librarymanagement.IvySbt$Module.withModule(Ivy.scala:238)
[error]     at sbt.internal.librarymanagement.IvyActions$.updateEither(IvyActions.scala:193)
[error]     at sbt.librarymanagement.ivy.IvyDependencyResolution.update(IvyDependencyResolution.scala:20)
[error]     at sbt.librarymanagement.DependencyResolution.update(DependencyResolution.scala:56)
[error]     at sbt.internal.LibraryManagement$.resolve$1(LibraryManagement.scala:45)
[error]     at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$12(LibraryManagement.scala:93)
[error]     at sbt.util.Tracked$.$anonfun$lastOutput$1(Tracked.scala:68)
[error]     at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$19(LibraryManagement.scala:106)
[error]     at scala.util.control.Exception$Catch.apply(Exception.scala:224)
[error]     at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11(LibraryManagement.scala:106)
[error]     at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11$adapted(LibraryManagement.scala:89)
[error]     at sbt.util.Tracked$.$anonfun$inputChanged$1(Tracked.scala:149)
[error]     at sbt.internal.LibraryManagement$.cachedUpdate(LibraryManagement.scala:120)
[error]     at sbt.Classpaths$.$anonfun$updateTask$5(Defaults.scala:2561)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]     at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:40)
[error]     at sbt.std.Transform$$anon$4.work(System.scala:67)
[error]     at sbt.Execute.$anonfun$submit$2(Execute.scala:269)
[error]     at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]     at sbt.Execute.work(Execute.scala:278)
[error]     at sbt.Execute.$anonfun$submit$1(Execute.scala:269)
[error]     at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error]     at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]     at java.lang.Thread.run(Thread.java:748)
[error] (update) sbt.librarymanagement.ResolveException: unresolved dependency: com.frugalmechanic#fm-sbt-s3-resolver;0.17.0: not found

Upvotes: 1

Views: 1704

Answers (2)

tpunder
tpunder

Reputation: 557

You probably want addSbtPlugin so you do not have to worry about the Scala or SBT version (it will be handled automatically):

addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.17.0")

Here is an example of it being used in another SBT plugin: built.sbt for fm-sbt-common

Upvotes: 0

ymonad
ymonad

Reputation: 12120

Looking into frugalmechanic group in maven, It seems that following pom exists:

fm-sbt-s3-resolver_2.12_1.0/0.17.0/fm-sbt-s3-resolver-0.17.0.pom
                  ^^^^^^^^^ this is scala version, and sbt version.

This path is not a normal one which consists of group id, and artifact id package version since it has _2.12_1.0 in it. This means that plugin is targeted to scala version 2.12, and sbt version 1.0.

Therefore adding plugin as dependency, you have to use Defaults.sbtPluginExtra() and tell that you need specific scala version and plugin version, as below:

libraryDependencies += Defaults.sbtPluginExtra("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.17.0", "1.0", "2.12")

first argument is package, second argument is sbt version, and third argument is scala version.

Upvotes: 2

Related Questions