SBT 0.10和IDEA的初学者指南

11

我是SBT的新手,不确定如何开始一个项目。有人能给我指一条创建Hello World类型项目的入门指南或者给我一些提示吗?

我的首选IDE是IDEA。我按照IDEA插件页面上的说明运行了sbt-idea。目前我有点困惑,因为:

  • 没有创建源文件夹——我应该在哪里/如何创建它们,SBT将如何知道在哪里查找?
  • 为什么它要使用Scala 2.8.1,当我已经在build.sbt文件中写下了scalaVersion := "2.9.0"?这意味着IDEA无法识别object HelloWorld extends App {}
  • 上面插件页面上的说明建议更改“运行配置(包括默认运行配置)的启动前选项”。列出了13种不同的默认配置,我应该更改哪一个?我应该创建一个新的吗?这些默认配置只针对这个项目还是会对所有不使用SBT的其他项目产生不良影响?

谢谢。

3个回答

16

以下方法适用于我:

首先需要下载sbt和gen-idea插件...

  1. 下载sbt-launch.jar并按照SBT Github wiki中的说明创建启动脚本。
  2. 创建一个新项目的目录,例如(在linux上)~/myCode/myNewProject,并切换到该目录。
  3. 运行sbt命令。 这将下载Scala库并创建“project”和“target”目录。
  4. 转到“project”目录。
  5. 在此目录中使用以下行创建名为“build.sbt”的新文件,如sbt-idea插件Github wiki所述:

    resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"
    
    addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.0.0")
    
  6. 回到你的主要项目目录,例如~/myCode/myNewProject。运行sbt。它应该会下载gen-idea插件。

  7. 从正在运行的sbt控制台中运行gen-idea命令。它应该创建IDEA项目目录。对我来说,它还会发出大量警告。

现在让我们开始设置IDEA SBT控制台插件...

  1. 打开IDEA并从插件管理器安装"SBT"插件,然后重启IDEA。(请注意,这是IDEA插件,而不是上面描述的sbt插件。) 按照其wiki(运行配置、sbt-launch.jar位置等)所述的方法配置SBT插件。
  2. 在IDEA中打开刚生成的IDEA项目。
  3. 按照'Directory Layout'下的sbt wiki所述,在预期的默认目录中放置您的代码和其他内容。您需要自己创建这些目录- sbt不会自动创建它们。 'src'和'test'目录应位于sbt创建的'project'和'target'目录的同一级别。
  4. 创建一个新的'build.sbt'文件并将其放入~/myCode/myProject(或其他名称)中。因为我刚刚开始使用sbt,所以我的非常简单-只是指定依赖项scalatest和使用Scala 2.9:

  5. name := "myProject"
    
    version := "0.1"
    
    organization := "me"
    
    libraryDependencies += "org.scalatest" % "scalatest_2.9.0" % "1.6.1"
    
    scalaVersion := "2.9.0"
    
  6. 在IDEA屏幕底部的SBT控制台中输入reload命令。它会为您下载scalatest和Scala 2.9。也许您还需要运行'update'。


3
感谢详细的指南和有用的链接。根据维基建议,将第5步中的build.sbt文件放入~/.sbt/plugins/可能会更好,因为这样就不必为每个项目都这样做了。在 Windows 上,你需要使用命令行在 Users\yourname\\ 中自己创建此目录。无论如何,现在我已按照 sbt 维基中的目录布局设置了文件夹,一切都正常工作! - Luigi Plinge

4
我写了一个关于它的快速指南。这并不是一个SBT指南--因为没有比SBT Wiki更好的方式了。而且,这也是毫无意义的,因为人们可以直接为wiki做贡献。
但是,我认为我的快速指南会让你按照自己的意愿启动和运行。
至于目录创建,我得到的答案是SBT希望IDE来处理这个问题--我并不喜欢这种态度,但是插件可以完成这项工作。你会看到,我安装了sbt eclipse插件,这样它就会为我完成这项工作,即使我自己使用的是IDEA(当我使用IDE时)。
另外,请注意,理想情况下,你要同时使用你提到的IDEA插件和SBT插件。在这里查看插件列表。
除非IDEA插件已经有很大的进展,否则你真的需要从SBT本身生成IDEA配置--IDEA不会“读取”你的配置。这就是SBT插件为IDEA所做的事情。安装它,然后运行sbt gen-idea。我希望这可以解决你提到的问题。
但是,请注意,你用于编译项目的Scala版本和SBT用于自身的Scala版本确实是不同的。这并不是问题,这是预期的。从你的问题中我不确定你提到的2.8.1版本是SBT使用的版本还是IDEA使用的版本--或者是用于编译你的项目的版本,这表明有些东西出了问题。
你把你提到的例子放在哪里了呢?你应该遵循maven-style的目录层次结构,这意味着将其放在src/main/scala/上,如果你也遵循Java约定,可能会放在与包相关的子目录中。
在继续使用IDEA之前,请尝试使用sbt进行编译,以确保它能正常工作。

谢谢。我看了你的指南,很有帮助,但我不知道你只是运行Eclipse插件来创建目录!我以前没有使用过Maven,所以对那里的结构不太熟悉。我把我的源文件放在“project”目录中,但它不起作用,但当我把它们移到正确的位置时就可以了! - Luigi Plinge
@Luigi 在这种情况下,可以看一下“Scala应用程序结构”这个问题。 - Daniel C. Sobral

0

我通常将src放入“src / test / scala”和“src / main / scala”文件夹中。sbt-idea会将这些文件夹添加为Idea中的源/测试文件夹。

sbt本身需要Scala 2.8.1,但此版本与您的代码版本无关。如果尝试编译某些源代码,sbt将下载Scala 2.9.0。


sbt-idea 运行时没有添加任何源文件夹。它将 Scala 的两个版本都放在了外部库中,但仍然无法识别 App 类。 - Luigi Plinge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接