如何在scala脚本中获得自动依赖项解析?

dsu*_*rsl 14 scala

我只是学习scala来自groovy/java世界.我的第一个脚本需要第三方库TagSoup进行XML/HTML解析,我不得不以旧学校的方式添加它:即从其开发人员网站下载TagSoup,然后将其添加到类路径中.

有没有办法在我的scala脚本中解析第三方库?我在想常春藤,我在想Grape.

想法?


对我来说最有效的答案是安装n8:

curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
cs harrah/xsbt --branch v0.11.0
Run Code Online (Sandbox Code Playgroud)

然后我可以很容易地导入tagsoup example.scala

  /***
      libraryDependencies ++= Seq(
          "org.ccil.cowan.tagsoup" % "tagsoup" % "1.2.1"
      )
  */

  def getLocation(address:String) = {
      ...
  }
Run Code Online (Sandbox Code Playgroud)

并使用scalas运行:

  scalas example.scala
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Dan*_*ral 12

虽然答案是SBT,但在考虑脚本的情况下可能会更有帮助.见,SBT有脚本一件特殊的事情,如所描述这里.一旦你scalas安装,通过安装征兵,然后运行cs harrah/xsbt --branch v0.11.0自己写或多或少这样的,或者干脆:

#!/bin/sh
java -Dsbt.main.class=sbt.ScriptMain \
     -Dsbt.boot.directory=/home/user/.sbt/boot \
     -jar sbt-launch.jar "$@"
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样写你的脚本:

#!/usr/bin/env scalas
!#

/***
scalaVersion := "2.9.1"

libraryDependencies ++= Seq(
  "net.databinder" %% "dispatch-twitter" % "0.8.3",
  "net.databinder" %% "dispatch-http" % "0.8.3"
)
*/

import dispatch.{ json, Http, Request }
import dispatch.twitter.Search
import json.{ Js, JsObject }

def process(param: JsObject) = {
  val Search.text(txt)        = param
  val Search.from_user(usr)   = param
  val Search.created_at(time) = param

  "(" + time + ")" + usr + ": " + txt
}

Http.x((Search("#scala") lang "en") ~> (_ map process foreach println))
Run Code Online (Sandbox Code Playgroud)

您可能也对paulp的xsbtscript感兴趣,它创建了一个与之xsbtscript相同的shell scalas(我猜后者是基于前者的),其优点是,如果没有安装conscript或sbt,你可以用它来做好准备:

curl https://raw.github.com/paulp/xsbtscript/master/setup.sh | sh
Run Code Online (Sandbox Code Playgroud)

请注意,它会安装sbt和conscript.

而且还有paulp的sbt-extras,这是另一种"sbt"命令行,有更多选项.请注意,它仍然是sbt,只是启动它的shell脚本更智能.


Chr*_*ain 8

SBT(简单构建工具)似乎是Scala世界中的首选构建工具.它支持许多不同的依赖解析机制:https://github.com/harrah/xsbt/wiki/Library-Management


om-*_*nom 7

作为答案放置,因为它不适合评论长度约束.

除了@Chris的答案,我想向你推荐一些公共场所(我个人认为这绝对是一流的).虽然sbt表示简单构建工具,但有时首次使用sbt设置项目并不容易(所有这些都有布局,配置等).

使用giter(g8)创建具有预定义模板的新项目(g8从github.com获取).有模板的Android应用程序,未经过滤更多.有时它们默认包含一些依赖项.要创建布局,只需输入:

g8 gseitz/android-sbt-project
Run Code Online (Sandbox Code Playgroud)

(Android应用程序的示例)

或者,使用np pluggin for sbt,它提供交互式输入方式来创建新项目和基本布局.