运行具有外部依赖项的Scala脚本

我在/Users/joe/.scala/lib下面有以下jar:

commons-codec-1.4.jar httpclient-4.1.1.jar httpcore-4.1.jar commons-logging-1.1.1.jar httpclient-cache-4.1.1.jar httpmime-4.1.1.jar 

下面是我用scala编写的test.sh。

 #!/bin/sh -v L=`cd /Users/joe/.scala/lib;pwd` cp=`echo $L/*.jar|sed 's/ /:/g'` echo $cp exec scala -classpath $cp $0 $@ !# println(new org.apache.commons.httpclient.HttpClient()) 

这是我得到的错误:

 $ ./test.sh #!/bin/sh -v L=`cd /Users/joe/.scala/lib;pwd` cd /Users/joe/.scala/lib;pwd cp=`echo $L/*.jar|sed 's/ /:/g'` echo $L/*.jar|sed 's/ /:/g' echo $cp /Users/joe/.scala/lib/commons-codec-1.4.jar:/Users/joe/.scala/lib/commons-logging-1.1.1.jar:/Users/joe/.scala/lib/httpclient-4.1.1.jar:/Users/joe/.scala/lib/httpclient-cache-4.1.1.jar:/Users/joe/.scala/lib/httpcore-4.1.jar:/Users/joe/.scala/lib/httpmime-4.1.1.jar exec scala -classpath $cp $0 $@ /Users/joe/Desktop/scala/./test.sh:7: error: object httpclient is not a member of package org.apache.commons println(new org.apache.commons.httpclient.HttpClient()) ^ one error found 

但是,没有任何类路径依赖的简单工作虽然:hello.sh

 #!/bin/sh exec scala "$0" "$@" !# println(new java.util.Date()) 

知道我在第一个例子中做错了什么吗? 或者,在使用scala脚本时,设置类路径依赖关系的最佳方法是什么?

我认为4.1.1的类是org.apache.http.client.HttpClient而不是org.apache.commons.httpclient,它是一个接口。 所以你可能想要

 new org.apache.http.client.DefaultHttpClient() 

代替

 new org.apache.commons.httpclient.HttpClient() 

在早期版本中可能会有所不同。

我不打算回答你的问题,但你可能会对此感兴趣。

假设您下载并安装SBT (版本0.10.0或更高版本),并创建一个名为“ scalas ”的shell脚本:

 java -Dsbt.main.class=sbt.ScriptMain \ -Dsbt.boot.directory=/home/user/.sbt/boot \ -jar sbt-launch.jar "$@" 

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

 #!/usr/bin/env scalas !# /*** scalaVersion := "2.9.1" libraryDependencies ++= Seq( "commons-codec" % "commons-codec" % "1.4", "org.apache.httpcomponents" % "httpclient" % "4.1.1", "org.apache.httpcomponents" % "httpcore" % "4.1", "commons-logging" % "commons-logging" % "1.1.1", "org.apache.httpcomponents" % "httpclient-cache" % "4.1.1", "org.apache.httpcomponents" % "httpmime" % "4.1.1" ) */ println(new org.apache.http.client.DefaultHttpClient())