SBT 0.13 的任务定义中不接受打印? [英] print not accepted in task definition in SBT 0.13?
问题描述
我使用的是 SBT 0.13.1
.
I'm using SBT 0.13.1
.
project/build.properties 如下:
sbt.version=0.13.1
执行 sbt about
打印出以下内容:
Executing sbt about
prints out the following:
$ sbt
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-0.13.1/project
[info] Set current project to sbt-0-13-1 (in build file:/Users/jacek/sandbox/so/sbt-0.13.1/)
[sbt-0-13-1]> about
[info] This is sbt 0.13.1
[info] The current project is {file:/Users/jacek/sandbox/so/sbt-0.13.1/}sbt-0-13-1 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.4-RC1
[info] Available Plugins: com.typesafe.sbt.SbtGit, com.typesafe.sbt.SbtProguard, growl.GrowlingTests, np.Plugin, net.virtualvoid.sbt.graph.Plugin, com.timushev.sbt.updates.UpdatesPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3
使用以下任务 - hello
- 在 build.sbt
中:
With the following task - hello
- in build.sbt
:
scalaVersion := "2.10.4-RC1"
lazy val hello = taskKey[Unit]("An example task")
hello := {
print("Sleeping for a sec...")
println("done.")
}
...和reload
,sbt 报告[error] Type error in expression
:
...and reload
, sbt reports [error] Type error in expression
:
[sbt-0-13-1]> reload
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-0.13.1/project
/Users/jacek/sandbox/so/sbt-0.13.1/build.sbt:6: error: type mismatch;
found : String("Sleeping for a sec...")
required: sbt.TaskKey[String]
print("Sleeping for a sec...")
^
[error] Type error in expression
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?
当我将 print
更改为 println
时,任务定义正确.
When I change print
to println
the task is defined correctly.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? r
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-0.13.1/project
[info] Set current project to sbt-0-13-1 (in build file:/Users/jacek/sandbox/so/sbt-0.13.1/)
[sbt-0-13-1]> hello
Sleeping for a sec...
done.
[success] Total time: 0 s, completed Jan 4, 2014 10:31:43 AM
任务定义中不接受print
吗?
推荐答案
在 schleichardt 的帮助下,我终于找到了找出导致在 hello
任务中不接受 print
问题的原因.
With the help of schleichardt I could finally find out what has caused the issue of not accepting print
in the hello
task.
事实证明,使用 sbt-dependency-graph 插件在全局配置目录,即 ~/.sbt/0.13/
(或由 sbt.global.base
指定的目录),sbt 无法初始化任务,因此出现错误.
It turned out that with the sbt-dependency-graph plugin in the global configuration directory, i.e. ~/.sbt/0.13/
(or a directory specified by sbt.global.base
), sbt couldn't initialize the task and hence the error.
$ cat plugins/sbt-dependency-graph.sbt
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4")
$ cat sbt-dependency-graph.sbt
net.virtualvoid.sbt.graph.Plugin.graphSettings
要重现,请参见 build.sbt
中以 print
(not println
)开头的以下 sbt 会话和空全局配置目录:
To reproduce, see the following sbt session starting with print
(not println
) in build.sbt
and empty global configuration directory:
jacek:~/sandbox/so/sbt-0.13.1
$ tree
.
├── build.sbt
└── project
└── build.properties
1 directory, 2 files
jacek:~/sandbox/so/sbt-0.13.1
$ cat build.sbt
scalaVersion := "2.10.4-RC1"
lazy val hello = taskKey[Unit]("An example task")
hello := {
print("Sleeping for a sec...")
println("done.")
}
jacek:~/sandbox/so/sbt-0.13.1
$ sbt -Dsbt.global.base=/tmp/so
Getting org.scala-sbt sbt 0.13.1 ...
:: retrieving :: org.scala-sbt#boot-app
confs: [default]
43 artifacts copied, 0 already retrieved (12646kB/154ms)
Getting Scala 2.10.3 (for sbt)...
:: retrieving :: org.scala-sbt#boot-scala
confs: [default]
5 artifacts copied, 0 already retrieved (24447kB/204ms)
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-0.13.1/project
[info] Updating {file:/Users/jacek/sandbox/so/sbt-0.13.1/project/}sbt-0-13-1-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to sbt-0-13-1 (in build file:/Users/jacek/sandbox/so/sbt-0.13.1/)
> hello
Sleeping for a sec...done.
[success] Total time: 0 s, completed Jan 4, 2014 1:35:22 PM
到目前为止它有效.
在全局配置中为sbt-dependency-graph插件创建文件目录.
Create the files for the sbt-dependency-graph plugin in the global configuration directory.
jacek:/tmp/so
$ cat plugins/sbt-dependency-graph.sbt
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4")
jacek:/tmp/so
$ cat sbt-dependency-graph.sbt
net.virtualvoid.sbt.graph.Plugin.graphSettings
...和重新加载
.
> reload
[info] Loading global plugins from /private/tmp/so/plugins
[info] Updating {file:/tmp/so/plugins/}global-plugins...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-0.13.1/project
[info] Updating {file:/Users/jacek/sandbox/so/sbt-0.13.1/project/}sbt-0-13-1-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
/Users/jacek/sandbox/so/sbt-0.13.1/build.sbt:6: error: type mismatch;
found : String("Sleeping for a sec...")
required: sbt.TaskKey[String]
print("Sleeping for a sec...")
^
[error] Type error in expression
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?
当 print
变成 println
和 (r)etry
时,它又可以正常工作了.
When print
changes to println
and (r)etry
, it works fine again.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? r
[info] Loading global plugins from /private/tmp/so/plugins
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-0.13.1/project
[info] Set current project to sbt-0-13-1 (in build file:/Users/jacek/sandbox/so/sbt-0.13.1/)
> hello
Sleeping for a sec...
done.
[success] Total time: 0 s, completed Jan 4, 2014 1:43:59 PM
这篇关于SBT 0.13 的任务定义中不接受打印?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!