2012-04-09 17 views
17

Así que he estado tratando de trabajar con el framework signal-collect y descargué los archivos .jar y los extraje en una carpeta. Actualmente la estructura de carpetas se parece a:Añadiendo .jar's 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 

Dónde PageRank.scala es el código de prueba Scala que brindan, que es:

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 
    } 

} 

soy un novato cuando se trata de la JVM/Java/Scala, y este fue mi intento de añadir el .jar's a la ruta de clase para compilar 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 

no puedo averiguar lo que está mal ... ¿cuál es h Aparición? Gracias! Saludos, -struct

Respuesta

28

Debe pasar ambas rutas de acceso de clases como un único argumento.

Prueba esto:

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

que trabajó para mí.

+4

también se puede usar '; 'para separar los nombres tarro – Jus12

+2

1 Por completo, tenga en cuenta que uno tiene que ** agregar el classpath tanto al compilar como al ejecutar **. Esto es algo que me perdí a primera vista. – JoErNanO

1

Parece que dependiendo de una versión instalada de Java, los comodines en classpath para incluir varios JAR pueden o no funcionar. He encontrado en otros lugares this trick en StackOverflow (tenga en cuenta que usted puede tener tantas carpetas después de la 'eco' como desee, separadas por espacios):

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