Pertanyaan Menjalankan Skenario Scala dengan dependensi eksternal


Saya memiliki guci berikut di bawah /Users/joe/.scala/lib:

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

Di bawah ini adalah test.sh saya tertulis dalam scala.

#!/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())

Inilah kesalahan yang saya dapatkan:

$ ./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

Namun, yang sederhana tanpa dependensi classpath bekerja sekalipun: hello.sh

#!/bin/sh
exec scala "$0" "$@"
!#

println(new java.util.Date())

Tahu apa yang saya lakukan salah dalam contoh pertama? Atau, apa cara terbaik untuk mengatur dependensi classpath ketika bekerja dengan skrip skrip?


5
2018-06-14 22:24


asal


Jawaban:


Saya pikir dengan 4.1.1 kelas adalah org.apache.http.client.HttpClient, bukan org.apache.commons.httpclient, dan ini merupakan antarmuka. Jadi, Anda mungkin ingin

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

dari pada

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

Ini mungkin berbeda dalam versi sebelumnya.


4
2018-06-14 23:59



Saya tidak akan menjawab pertanyaan Anda, tetapi Anda mungkin tertarik dengan ini.

Misalkan Anda mengunduh dan menginstal SBT (versi 0.10.0 atau lebih tinggi), dan buat skrip shell yang disebut "scalas":

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

Dan kemudian Anda menulis skrip Anda seperti ini:

#!/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())

10
2017-09-02 16:33