什么';s Scala+;sbt工作流相当于Ruby+;带Gemfile的Bundler?

什么';s Scala+;sbt工作流相当于Ruby+;带Gemfile的Bundler?,scala,development-environment,sbt,Scala,Development Environment,Sbt,我在学习Scala时玩得很开心,但我最难掌握如何建立一个开发环境 红宝石色 文件层次结构 my_app/ | +-- Gemfile +-- app.rb Gemfile source :rubygems gem "mechanize" app.rb require "mechanize" agent = Mechanize.new page = agent.get("http://google.com") 安装依赖项并运行它 $ bundle install $ ru

我在学习Scala时玩得很开心,但我最难掌握如何建立一个开发环境

红宝石色
  • 文件层次结构

    my_app/
      |
      +-- Gemfile
      +-- app.rb
    
  • Gemfile

    source :rubygems
    gem "mechanize"
    
  • app.rb

    require "mechanize"
    agent = Mechanize.new
    page = agent.get("http://google.com")
    
  • 安装依赖项并运行它

    $ bundle install
    $ ruby app.rb
    
    $ sbt run
    
Scala与sbt的等价物是什么? 我正在阅读关于sbt以及包/导入/jar依赖关系在Java/Scala中如何工作的文章,但我似乎无法过滤出基本的必要性

  • 使用Scala复制上述内容的最小文件层次结构是什么
  • 以下是Maven上可用的Java Mechanize库:
  • 运行
    sbt
    并下载Mechanize依赖项后,如何识别使其工作所需的
    import
    语句

    val agent = new MechanizeAgent
    val page: HtmlDocument = agent.get("http://www.google.com")
    
我在Eclipse中通过手动导入.jars,然后从库中导入包,直到编译器/运行时错误停止并且代理工作,从而实现了上述功能。但那次经历令人沮丧,我来到这里是为了忏悔

这个问题的意图:Java生态系统/工作流对我来说是压倒性的,因为我已经习惯了Ruby轻松、无创意的工作流。我想一个赤裸裸的人会给我一个开始建设的地方


理想情况下,在依赖Eclipse之前,我希望Scala开发只使用Vim和命令行。

sbt使用一个名为ivy的库从主maven存储库导入项目。sbt预配置了几个存储库,包括主maven存储库

一旦这些库被“解析”(下载到您的计算机并连接到您的项目),eclipse插件将为生成的eclipse项目中的每个jar创建依赖项

下面是如何配置它的

sbt管理的依赖关系

在项目的build.sbt文件中添加依赖项。如果添加依赖于特定版本的scala的依赖项,请在组和工件名称之间使用两个%%。不要忘记在build.sbt文件中的每个命令之间添加一个空行

libraryDependencies += "com.gistlabs" % "mechanize" % "0.11.0"

libraryDependencies += "org.scalatest" %% "scalatest" % "1.6.1" % "test"
通过运行Update命令更新依赖项:

$ sbt update
sbt Eclipse插件

您可以通过在~/.sbt/plugins/plugins.sbt创建一个文件并将以下行放入其中,从而全局安装sbt eclipse插件:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0")
无论何时添加或更新依赖项,请运行以下命令并刷新eclipse项目:

$ sbt eclipse

我想比ffk的答案更进一步,做更多的牵手工作,并实际提供Ruby示例到Scala+sbt的直接翻译

  • 文件层次结构

    Crawler/
      +- build.sbt
      +- src/
         +- main/
            +- scala/
               +- Crawler.scala
    
  • build.sbt

    libraryDependencies += "com.gistlabs" % "mechanize" % "0.11.0"
    
  • scala爬虫

    import com.gistlabs.mechanize.MechanizeAgent
    import com.gistlabs.mechanize.document.Document
    
    object Crawler extends App {
      val agent = new MechanizeAgent
      val page: Document = agent.get("http://google.com")
    }
    
  • 安装依赖项并运行它

    $ bundle install
    $ ruby app.rb
    
    $ sbt run
    
要将项目导入Eclipse或IntelliJ,您需要sbteclipse插件sbt idea插件。但是,不必在每个新项目的build.sbt中声明这些插件,您可以在global build.sbt中声明它们:

// in ~/.sbt/plugins/build.sbt
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0")
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0")
然后,返回Scala应用程序的根目录:

$ sbt eclipse
or
$ gen-idea
之后,您应该能够在各自的IDE中打开它

注意:每当您在build.sbt中添加依赖项时,您都需要重新运行
sbt eclipse
/
genidea
命令,以便IDE可以选择它