-->

Installing Ensime for Scala Development on emacs:

2019-08-07 05:12发布

问题:

I have placed the line:

addSbtPlugin("org.ensime" % "ensime-sbtt-cmd" % "0.12")

into my ~/.sbt/0.13/plugins/plugins.sbt

But, when I try to run sbt within the root directory of my project, I get:

Loading /usr/share/sbt/bin/sbt-launch-lib.bash
[info] Loading global plugins from /home/djg/.sbt/0.13/plugins
[info] Updating {file:/home/djg/.sbt/0.13/plugins/}global-plugins...
[info] Resolving org.ensime#ensime-sbtt-cmd;0.12 ...
[warn]  module not found: org.ensime#ensime-sbtt-cmd;0.12
[warn] ==== typesafe-ivy-releases: tried
[warn]   http://repo.typesafe.com/typesafe/ivy-releases/org.ensime/ensime-sbtt-cmd/scala_2.10/sbt_0.13/0.12/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.ensime/ensime-sbtt-cmd/scala_2.10/sbt_0.13/0.12/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /home/djg/.ivy2/local/org.ensime/ensime-sbtt-cmd/scala_2.10/sbt_0.13/0.12/ivys/ivy.xml
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/org/ensime/ensime-sbtt-cmd_2.10_0.13/0.12/ensime-sbtt-cmd-0.12.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.ensime#ensime-sbtt-cmd;0.12: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]      org.ensime:ensime-sbtt-cmd:0.12 (sbtVersion=0.13, scalaVersion=2.10)
[warn] 
sbt.ResolveException: unresolved dependency: org.ensime#ensime-sbtt-cmd;0.12: not found
    at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:213)
    at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:122)
    at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:121)
    at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:116)
    at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:116)
    at sbt.IvySbt$$anonfun$withIvy$1.apply(Ivy.scala:104)
    at sbt.IvySbt.sbt$IvySbt$$action$1(Ivy.scala:51)
    at sbt.IvySbt$$anon$3.call(Ivy.scala:60)
    at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:98)
    at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:81)
    at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:102)
    at xsbt.boot.Using$.withResource(Using.scala:11)
    at xsbt.boot.Using$.apply(Using.scala:10)
    at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:62)
    at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:52)
    at xsbt.boot.Locks$.apply0(Locks.scala:31)
    at xsbt.boot.Locks$.apply(Locks.scala:28)
    at sbt.IvySbt.withDefaultLogger(Ivy.scala:60)
    at sbt.IvySbt.withIvy(Ivy.scala:101)
    at sbt.IvySbt.withIvy(Ivy.scala:97)
    at sbt.IvySbt$Module.withModule(Ivy.scala:116)
    at sbt.IvyActions$.update(IvyActions.scala:121)
    at sbt.Classpaths$$anonfun$sbt$Classpaths$$work$1$1.apply(Defaults.scala:1144)
    at sbt.Classpaths$$anonfun$sbt$Classpaths$$work$1$1.apply(Defaults.scala:1142)
    at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$73.apply(Defaults.scala:1165)
    at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$73.apply(Defaults.scala:1163)
    at sbt.Tracked$$anonfun$lastOutput$1.apply(Tracked.scala:35)
    at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:1167)
    at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:1162)
    at sbt.Tracked$$anonfun$inputChanged$1.apply(Tracked.scala:45)
    at sbt.Classpaths$.cachedUpdate(Defaults.scala:1170)
    at sbt.Classpaths$$anonfun$updateTask$1.apply(Defaults.scala:1135)
    at sbt.Classpaths$$anonfun$updateTask$1.apply(Defaults.scala:1113)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
    at sbt.std.Transform$$anon$4.work(System.scala:64)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:244)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
[error] (*:update) sbt.ResolveException: unresolved dependency: org.ensime#ensime-sbtt-cmd;0.12: not found
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? 

I was guessing the VERSION number was wrong, so I tried replacing "0.12" with "0.13", and "0.12-SNAPSHOT", but keep getting similar results.

My goal is to use ensime with emacs to edit Scala code. What am I missing?

回答1:

Looking at the build file of that plugin:

version := "0.1.2"

the correct version seems to be "0.1.2", not "0.12". (see here).

Furthermore, you have a typo in the arifact name: It's "ensime-sbt-cmd" not "ensime-sbtt-cmd".


Normally, sbt should find stuff in oss.sonatype.org even if it doesn't get through to Maven Central. However, I'm not sure this goes for plugins as well, therefore you might try to explicitly add a resolver for it:

resolvers += 
  "Sonatype releases" at "https://oss.sonatype.org/content/repositories/releases"