无法使用 :cp 命令将 jar 文件添加到 Scala REPL 中

8
如果我输入以下命令:
$ scala -classpath poi-3.9/poi-3.9-20121203.jar 

scala> import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFSheet

一切都正常工作,但如果我改为发出以下命令:

$ scala

scala> :cp poi-3.9/poi-3.9-20121203.jar
Added '/home/sas/tmp/poi/poi-3.9/poi-3.9-20121203.jar'.  Your new classpath is:
".:/home/sas/tmp/poi/poi-3.9/poi-3.9-20121203.jar"
Nothing to replay.

scala> import org.apache.poi.hssf.usermodel.HSSFSheet
<console>:7: error: object apache is not a member of package org
       import org.apache.poi.hssf.usermodel.HSSFSheet
                  ^

我是否漏掉了什么?


你正在使用哪个版本的Scala? - gourlaysama
4
显然这是一个已知的问题。它在使用Scala 2.10及以上版本时不再起作用:SI-6502 - gourlaysama
使用Scala代码运行器版本2.10.1--版权所有2002-2013年,LAMP/EPFL。 - opensas
我在使用绝对路径时,并没有发现Scala 2.11.0的问题。 - philwalk
3个回答

5
没有人似乎提到这一点,但正确的解决方案是使用“:require”命令::require command
scala> :require foo.jar
Added 'foo.jar' to classpath.

这应该是被接受的答案,因为它不需要替代的repl或更改环境变量。就像:cp一样工作,感谢您的帮助。 - faizan

0

正如评论中所指出的,这是一个已知的问题。您可以使用其他REPL实现,例如Ammonite


0

另一种默认导入jar文件的方法是在$SCALA_HOME/lib中添加感兴趣的jar文件链接。然后每次进入REPL时,这些链接的jar文件将被上传。

例如,对于poi-3.9-20121203.jar,请考虑:

(cd $SCALA_HOME/lib && ln -s full_path_to_poi_jar/poi-3.9-20121203.jar)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接