【问题标题】:Adding .jar's to classpath (Scala)将 .jar 添加到类路径(Scala)
【发布时间】:2012-04-22 02:28:13
【问题描述】:

所以我一直在尝试使用signal-collect 框架,我下载了.jar 文件并将其解压缩到一个文件夹中。目前文件夹结构如下:

LICENSE.txt  
PageRank.scala  
core-1.1.1-sources.jar  
dependencies/  
javaapi-1.1.1-sources.jar  
NOTICE.txt  
README.txt  
core-1.1.1.jar  
javaapi-1.1.1-javadoc.jar  
javaapi-1.1.1.jar  

其中PageRank.scala是他们提供的Scala测试代码,即:

import com.signalcollect._

object PageRank extends App {
  val graph = GraphBuilder.build
  graph.addVertex(new PageRankVertex(id=1))
  graph.addVertex(new PageRankVertex(id=2))
  graph.addEdge(new PageRankEdge(sourceId=1, targetId=2))
  graph.addEdge(new PageRankEdge(sourceId=2, targetId=1))
  graph.execute
  graph.foreachVertex(println(_))
  graph.shutdown
}

class PageRankVertex(id: Any, dampingFactor: Double=0.85)
    extends DataGraphVertex(id=id, state=1-dampingFactor) {
  type Signal = Double

  def collect(oldState: Double, mostRecentSignals: Iterable[Double]): Double = {
    1 - dampingFactor + dampingFactor * mostRecentSignals.sum
  }

}

class PageRankEdge(sourceId: Any, targetId: Any)
    extends DefaultEdge(sourceId, targetId) {
  type SourceVertex = PageRankVertex

  def signal(sourceVertex: PageRankVertex) = {
    sourceVertex.state * weight / sourceVertex.sumOfOutWeights
  }

}

我是 JVM/Java/Scala 的新手,这是我尝试将 .jar's 添加到类路径以编译 PageRank.scala

$ scalac -classpath *.jar dependencies/*.jar PageRank.scala 
error: IO error while decoding core-1.1.1.jar with UTF-8
Please try specifying another one using the -encoding option
error: IO error while decoding javaapi-1.1.1-javadoc.jar with UTF-8
Please try specifying another one using the -encoding option
error: IO error while decoding javaapi-1.1.1-sources.jar with UTF-8
Please try specifying another one using the -encoding option
error: IO error while decoding javaapi-1.1.1.jar with UTF-8
Please try specifying another one using the -encoding option
error: IO error while decoding dependencies/je-3.2.76.jar with UTF-8
Please try specifying another one using the -encoding option
error: IO error while decoding dependencies/scala-library-2.9.1.jar with UTF-8
Please try specifying another one using the -encoding option
6 errors found

我不知道出了什么问题……发生了什么? 谢谢! 问候, -kstruct

【问题讨论】:

    标签: scala jar jvm classpath


    【解决方案1】:

    您需要将两个类路径路径作为单个参数传递。

    试试这个:

    $ scalac -classpath "*.jar:dependencies/*.jar" PageRank.scala
    $ scala -classpath "*.jar:dependencies/*.jar" PageRank
    PageRankVertex(id=2, state=0.9999999999999997)
    PageRankVertex(id=1, state=0.9999999999999997)
    

    它对我有用。

    【讨论】:

    • 也可以使用;分隔jar名称
    • +1 为了完整起见,请注意必须在编译和执行时都添加类路径。这是我第一眼就错过的东西。
    【解决方案2】:

    似乎根据已安装的 Java 版本,在类路径中包含多个 JAR 的通配符可能有效,也可能无效。我在 StackOverflow 的其他地方找到了this trick(请注意,您可以在“echo”之后拥有任意数量的文件夹,以空格分隔):

    scalac -classpath $(echo *.jar dependencies/*.jar | tr ' ' ':')  PageRank.scala
    scala -classpath $(echo *.jar dependencies/*.jar | tr ' ' ':')  PageRank
    

    【讨论】:

      【解决方案3】:

      为简单起见,您可以使用: scala -classpath $(echo *.jar dependencies/*.jar | tr ' ' ':') PageRank.scala

      【讨论】:

        猜你喜欢
        • 2015-03-02
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-15
        • 1970-01-01
        • 2016-11-04
        相关资源
        最近更新 更多