我已经下载了一个使用sbt作为构建系统的项目,我想构建它.你会认为它就像输入"sbt"或其他东西一样简单,但不是.
我想我会为此添加一个问题,因为它可能花费几个小时来自己解决这个问题.我不是在开玩笑.
首先,您将需要使用sbt-extras,因为它会自动下载并使用正确版本的sbt.试图使用错误的sbt版本(比你想要构建的项目更新或更旧)说明它不一定有效,并且可能会导致奇怪的错误.
运行:
~/path/to/sbt-extras/sbt
Run Code Online (Sandbox Code Playgroud)
等待它启动并下载所有内容.如果需要使用经过身份验证的代理,则需要编辑脚本以指定代理的用户名和密码.
检查sbt 认为需要构建的Scala版本(在输出结束时,如果一切正常).如果这没关系,那很好,你不需要做任何事情.如果不是,您可以使用++临时指定版本,例如:
++2.8.1
Run Code Online (Sandbox Code Playgroud)
(如果要使其永久化,可以编辑构建定义文件,但因为这涉及在版本控制下对文件进行更改,这可能不是您想要做的.)
现在,如果您使用的是旧版本的sbt,请不要跳过下一步!如果你这样做,你会遇到奇怪的错误.
update
Run Code Online (Sandbox Code Playgroud)
现在您可以构建和测试您构建的内容:
test
Run Code Online (Sandbox Code Playgroud)
如果您收到错误"文件名太长",这不是特定于sbt的问题,这是一个scala问题,最常见的是影响Ubuntu用户(从技术上讲,对于Unbuntu用户,它通常与使用encfs加密的主目录相关).如果您使用的是Scala> = 2.9,请编辑构建以使用scalac命令行选项,该选项允许您指定最大文件名长度.否则,如果您使用的是Linux,则可以通过在shell提示符下运行这些命令将构建重定向到/ dev/shm或/ tmp (不要在Unix上使用CTRL + Z进行后台sbt,因为它可能似乎停止工作正确):
rm -rf target
ln -s /dev/shm target
Run Code Online (Sandbox Code Playgroud)
(您可能必须在项目/构建中执行这些命令,或者也可以.)
实际上,创建/ dev/shm或/ tmp的子目录并使用它可能更好,甚至可能更安全.
编译结果应出现在目标中.然后你可能想要运行它,如果它是你可以运行的东西:
run
Run Code Online (Sandbox Code Playgroud)
如果一切正常,您可以选择在本地发布结果,以便其他sbt构建可以自动获取结果:
publish-local
Run Code Online (Sandbox Code Playgroud)
TL;博士:
sbt compile
Run Code Online (Sandbox Code Playgroud)
如果你想运行它:
sbt run
Run Code Online (Sandbox Code Playgroud)
要查看可用的其他目标:
sbt tasks
Run Code Online (Sandbox Code Playgroud)
获得一些(其他)帮助,但主要针对从sbt控制台输入的命令(即,sbt不带参数运行):
sbt help
Run Code Online (Sandbox Code Playgroud)
这都假定sbt版本> = 0.10.0.要查看正在使用的sbt版本,请执行以下操作:
grep sbt.version project/build.properties
Run Code Online (Sandbox Code Playgroud)
如果没有这样的文件,并且在基目录(而不是项目目录)上有一个扩展名为".sbt"的文件,则它> = 0.10.0.当然,如果grep工作,它应该告诉你版本.