Estoy trabajando en un script de Scala que utiliza Joda Time. Hasta hoy, esto estaba funcionando bien. De alguna manera, algo ha cambiado y ya no funciona.¿Por qué puedo usar una lib de Java desde Scala REPL pero no desde un script?
Esto funciona:
$ scala -cp "lib/*"
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import org.joda.time._
import org.joda.time._
scala> Period.minutes(5)
res0: org.joda.time.Period = PT5M
pero esto no es así:
$ scala -cp "lib/*" test.scala
/Users/avi/Dev/experiments/rollups/scala/test.scala:4: error: object joda is not a member of package org
import org.joda.time._
^
one error found
test.scala
incluye solamente:
#!/usr/bin/env scala -cp lib/* -deprecation
!#
import org.joda.time._
Period.minutes(5)
esto también no funciona:
$ scala -cp "lib/*" -e "import org.joda.time._"
/var/folders/c4/gh5y9_cx5bz8x_4wm060l_mm0000gn/T/scalacmd1248995773392653303.scala:1: error: object joda is not a member of package org
import org.joda.time._
^
one error found
Tampoco es causada por el uso de *
en el cp
arg:
$ scala -cp lib/joda-time-2.0.jar:lib/joda-convert-1.2.jar -e "import org.joda.time._"
/var/folders/c4/gh5y9_cx5bz8x_4wm060l_mm0000gn/T/scalacmd5438658792813459030.scala:1: error: object joda is not a member of package org
import org.joda.time._
^
one error found
... Es tan loco porque este estaba trabajando la última vez que trabajé en este proyecto, sólo un día o dos atrás! Y ahora no está funcionando, y creo que debo haber cambiado algo, pero sinceramente no puedo pensar en qué podría ser.
¡Ayuda!
La mejor manera de manejarlo no es usar rutas relativas en las directivas de classpath. –
Gracias a DanielC.Sobral, eso tiene sentido, pero esto parece poco práctico para las secuencias de comandos. Mi script tiene esto en la parte superior: '#!/Usr/bin/env scala -cp lib/* -deprecation ! #' Y quiero poder invocar el script desde cualquier ubicación en bash. Entonces quizás haya una mejor manera de hacerlo, pero no es obvio para mí, ya que no soy un experto en bash ni un experto en Scala. –
Utilice el modo de invocación alternativo: llame a sh, y luego, desde sh, llame a scala, en ese punto puede usar pwd para obtener el directorio actual. –