【问题标题】:Include jar file in Scala interpreter在 Scala 解释器中包含 jar 文件
【发布时间】:2010-12-15 00:20:23
【问题描述】:

是否可以包含运行 Scala 解释器的 jar 文件?

当我从 scalac 编译时,我的代码正在运行:

scalac script.scala -classpath *.jar

但我希望能够在运行解释器时包含一个 jar 文件。

【问题讨论】:

    标签: scala jar interpreter


    【解决方案1】:

    在scala2.8中,可以使用

    scala>:jar JarName.jar
    

    将 jar 添加到类路径。

    在 Scala 2.8.1 中,它不是 :jar 而是 :cp

    在 Scala 2.11.7 中,它不是 :cp 而是 :re(quire)

    【讨论】:

    • 我试过这个并得到了一种成功的信息..但它没有用。添加了“/shared/spark-core_2.10-0.9.0-incubating-SNAPSHOT.jar”。您的新类路径是:“.:/shared/spark-core_2.10-0.9.0-incubating-SNAPSHOT.jar”。但是导入不起作用。 (注意:我在通过命令行类路径添加时验证了导入工作)
    • 与javadba相同:在解释器中将jar添加到类路径时导入不起作用,您将收到错误消息“object xxx is not a member of package yyy” i> 这样做的时候。
    【解决方案2】:

    根据 scala 可执行帮助,scalac 的所有选项都是允许的, 所以你可以运行scala -classpath some.jar,我刚刚尝试过,它看起来可以工作

    【讨论】:

      【解决方案3】:

      在 Scala REPL 2.10.0-RC2 中包含多个 jar

      scala -classpath my_1st.jar:my_2nd.jar:my_3rd.jar
      

      【讨论】:

        【解决方案4】:

        就我而言,我使用的是 Scala 代码运行器版本 2.9.2。我不得不添加引号。 我正在使用这个 jar 文件:

        jdom-b10.jar, rome-0.9.jar

        一切顺利:

        scala -classpath "*.jar" feedparser.scala
        

        【讨论】:

          【解决方案5】:

          在来自 scala REPL 的 Scala 版本 2.11.6 中使用 :require,最好使用来自 REPL 的 :help 来计算

          例如:

          $ scala
          Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
          Type in expressions to have them evaluated.
          Type :help for more information.
          scala> :require lift-json_2.11-3.0-M5-1.jar
          Added '<path to lift json library>/lift-json/lift-json_2.11-3.0-M5-1.jar' to classpath.
          

          【讨论】:

            【解决方案6】:

            Scala 版本 2.11.5:

            以下是在 ivy 缓存中添加所有 jar 的示例:

            scala -cp /Users/dbysani/.ivy2/cache/org.apache.spark/spark-streaming_2.10/jars/*
            
            scala> import org.apache.spark.streaming.StreamingContext
            import org.apache.spark.streaming.StreamingContext
            

            您还可以为需要添加的所有 jar 创建一个本地文件夹,并以类似的方式添加它。

            希望这会有所帮助。

            【讨论】:

              【解决方案7】:

              "lib/*.jar" 生成一个列表,项目之间有空白,不是“:”或“;”按要求。 由于 Java 6 "lib/*" 应该可以工作,但有时不能(类路径设置在其他地方)

              我使用如下脚本:

              1. 窗户:

                @rem all *.jars in lib subdirectory
                
                @echo off
                
                set clp=.
                
                for %%c in (lib\*.jar) do call :Setclasspath %%c
                
                echo The classpath is %clp% 
                
                scala -classpath %clp% script.scala
                
                exit /B %ERRORLEVEL%
                
                :Setclasspath
                set clp=%clp%;%~1
                exit /B 0
                
              2. Linux:

                #!/bin/bash
                
                #all *.jars in lib subdirectory
                
                clp="."
                
                for file in lib/*
                do
                  clp="$clp:$file"
                done
                
                echo $clp
                
                
                scala -classpath $clp script.scala
                

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-11-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-03
                • 2015-08-16
                相关资源
                最近更新 更多