2012-04-09 1 views
17

So habe ich versucht, mit dem signal-collect Framework zu arbeiten, und ich habe die .jar Dateien heruntergeladen und in einen Ordner extrahiert. Derzeit ist die Ordnerstruktur wie folgt aussieht:Hinzufügen von .jar zu 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 

Wo PageRank.scala ist der Scala Testcode sie bieten, das ist:

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 
    } 

} 

ich ein Neuling bin, wenn es um den JVM/Java/Scala kommt, und das war mein Versuch, die .jar's zu dem classpath Zugabe PageRank.scala zum Kompilieren:

$ 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 

ich kann nicht herausfinden, was schief läuft ... was ist h ansteckend? Danke! Grüße, -kstruct

Antwort

28

Sie müssen beide Klassenpfad Pfade als ein einzelnes Argument übergeben.

Try this:

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

Es ist für mich gearbeitet.

+4

Sie können auch mit ',', um die JAR-Namen zu trennen – Jus12

+2

+1 Beachten Sie bitte, dass Sie den Klassenpfad sowohl beim Kompilieren als auch beim Ausführen ** hinzufügen müssen. Das habe ich auf den ersten Blick übersehen. – JoErNanO

1

Es scheint, dass in Abhängigkeit von einer installierten Version von Java Platzhalter im Klassenpfad zum Einschließen mehrerer JARs funktionieren könnten oder nicht. Ich fand this trick an anderer Stelle auf Stackoverflow (beachten Sie, dass Sie so viele Ordner nach dem ‚Echo‘ haben können, wie Sie möchten, getrennt durch Leerzeichen):

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