Добавление пути .jar к classpath (Scala)

17

Итак, я пытался работать с сигналом сбора , и я загрузил .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     

задан adelbertc 09.04.2012 в 20:30
источник

2 ответа

28

Вам нужно передать оба пути пути к классам как один аргумент.

Попробуйте следующее:

$ 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)

Это сработало для меня.

    
ответ дан dhg 09.04.2012 в 20:41
  • вы также можете использовать; отделить имена баннеров –  Jus12 10.04.2012 в 08:48
  • +1 Для завершения нужно отметить, что нужно добавить путь к классам как при компиляции, так и при выполнении. Это то, что я пропустил с первого взгляда. –  JoErNanO 18.11.2015 в 13:50
2

Кажется, что в зависимости от установленной версии Java шаблоны в classpath для включения нескольких JAR могут работать или не работать. Я нашел этот трюк в другом месте StackOverflow (обратите внимание, что вы можете иметь столько папок после «эха», сколько хотите, разделенных пробелами):

scalac -classpath $(echo *.jar dependencies/*.jar | tr ' ' ':')  PageRank.scala
scala -classpath $(echo *.jar dependencies/*.jar | tr ' ' ':')  PageRank
    
ответ дан Maksym 28.06.2017 в 13:47