2012-04-09 4 views
17

Così ho cercato di lavorare con il framework signal-collect e ho scaricato i file .jar e l'ho estratto in una cartella. Attualmente la struttura della cartella si presenta come:Aggiunta di .jar a classpath (Scala)

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 

Dove PageRank.scala è il codice di prova Scala che forniscono, che è:

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 
    } 

} 

Sono un novizio quando si tratta di JVM/Java/Scala, e questo è stato il mio tentativo di aggiungere il .jar's al classpath per la compilazione 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 

io non riesco a capire cosa non va ... cosa c'è h appening? Grazie! Cordiali saluti, -strumento

risposta

28

È necessario passare entrambi i percorsi del percorso di classe come un singolo argomento.

Prova questo:

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

ha funzionato per me.

+4

si può anche usare ';' per separare i nomi vaso – Jus12

+2

+1 Per completezza, si noti che si deve ** aggiungere il classpath sia durante la compilazione che durante l'esecuzione **. Questo è qualcosa che ho perso a prima vista. – JoErNanO

1

Sembra che, in base a una versione di Java installata, i caratteri jolly in classpath per includere più JAR potrebbero o potrebbero non funzionare. Ho trovato this trick altrove su StackOverflow (si noti che si può avere il maggior numero di cartelle dopo la 'echo' come si desidera, separati da spazi):

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