我有一个调用的Scala项目scala-playground
,我用sbt ensimeConfig
和生成了Ensime的配置sbt ensimeConfigProject
.
当M-x ensime
从项目的缓冲区运行时,我可以在Emacs状态栏中看到Ensime已连接:它显示Scala[scala-playground]
.
在运行项目时C-c C-b r
,在主目录中启动一个新的sbt实例,$HOME/project
创建一个目录而不是项目目录并失败:
[info] Loading project definition from /home/user/project
[info] Set current project to user (in build file:/home/user/)
[info] sbt server started at 127.0.0.1:4766
sbt:user>
sbt:user> run
[error] java.lang.RuntimeException: No main class detected.
[error] at scala.sys.package$.error(package.scala:27)
[error] at sbt.Defaults$.$anonfun$runTask$4(Defaults.scala:1199)
[error] at scala.Option.getOrElse(Option.scala:121)
[error] at sbt.Defaults$.$anonfun$runTask$3(Defaults.scala:1199)
[error] at sbt.Defaults$.$anonfun$runTask$3$adapted(Defaults.scala:1198)
[error] at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:42)
[error] at sbt.std.Transform$$anon$4.work(System.scala:64)
[error] at sbt.Execute.$anonfun$submit$2(Execute.scala:257)
[error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
[error] at sbt.Execute.work(Execute.scala:266)
[error] at sbt.Execute.$anonfun$submit$1(Execute.scala:257)
[error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:167)
[error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:32)
[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] (compile:run) No main class detected.
[error] Total time: 0 s, completed Aug 28, 2017 9:10:03 PM
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?
mpm*_*mpm 14
删除~/project
文件夹,然后启动emacs.
如果你运行sbt
在你的$HOME
目录中它创造了基本的项目结构出现,主要是project
和target
目录.然后,如果您打开任何*.scala
文件,emacs(sbt-mode
)将沿着您的路径找到根项目目录.它在你的身上发现了一个$HOME
.你可以在doc中看到它:
Starting from the current default-directory, find a parent
directory that is an sbt root. An sbt root directory is
identified by the following rules:
- a directory containing a 'project/build.properties' in it.
- a directory that contains a file matching one of the patterns
'*.sbt' or 'project/*.scala' file in it.
Run Code Online (Sandbox Code Playgroud)
当前实现的一个问题是每个缓冲区仅执行一次该过程.如果sbt:buffer-project-root
变量设置一次,它将不会更新.
您可以通过重新启动emacs或通过评估(setq-local sbt:buffer-project-root nil)
每个打开的缓冲区强制新值,然后以通常的方式启动sbt表单emacs.
如果从具有错误值的任何缓冲区中删除~/project
并运行,它将在home中启动sbt,这将再次创建.所以,最简单的方法是杀死emacs,删除目录,然后再次启动emacs.ensime-sbt
sbt:buffer-project-root
~/project
归档时间: |
|
查看次数: |
504 次 |
最近记录: |