2013-08-04 9 views
5

Sto costruendo una piccola utility di query per database usando Scala e Slick, con Maven come strumento di compilazione e creazione.Come posso risolvere "errore: riferimento simbolico errato" per dipendenze usando il plugin maven-scala?

Il mio codice compilato senza errori di sintassi, ma la build riesce con questo:

[INFO] --- maven-scala-plugin:2.15.0:compile (default) @ origdups --- 
[INFO] Checking for multiple versions of scala 
[INFO] includes = [**/*.scala,**/*.java,] 
[INFO] excludes = [] 
[INFO] /home/lreeder/dev/scala/origdups/src/main/scala:-1: info: compiling 
[INFO] Compiling 4 source files to /home/lreeder/dev/scala/origdups/target/classes at 1375638972068 
[INFO] No known dependencies. Compiling everything 
[ERROR] error: bad symbolic reference. A signature in Mapper.class refers to term runtime 
[INFO] in package scala.reflect which is not available. 
[INFO] It may be completely missing from the current classpath, or the version on 
[INFO] the classpath might be incompatible with the version used when compiling Mapper.class. 
(several more similar errors) 

Nota che la classe Mapper non è il mio codice. Penso che sia parte di Slick? Sto usando Scala 2.10.1 per il plugin Maven-Scala:

<dependency> 
    <groupId>org.scala-lang</groupId> 
    <artifactId>scala-library</artifactId> 
    <version>2.10.1</version> 
</dependency> 

e Slick 2.10 (attualmente costruire con Scala 2.10.1):

<dependency> 
    <groupId>com.typesafe.slick</groupId> 
    <artifactId>slick_2.10</artifactId> 
    <version>1.0.1</version> 
</dependency> 

ho compilato con Maven di debug attivata on, e questa è la chiamata Java che genera gli errori sopra.

/usr/local/jdk1.7.0_21/jre/bin/java -classpath /home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-tools/maven-scala-plugin/2.15.0/maven-scala-plugin-2.15.0.jar -Xbootclasspath/a:/home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar org_scala_tools_maven_executions.MainWithArgsInFile scala.tools.nsc.Main /tmp/scala-maven-6314934214401019063.args

Cosa mi manca qui? Cosa deve essere impostato nella configurazione del plugin maven-scala per eliminare questi errori.

risposta

6

Questo errore:

error: bad symbolic reference. A signature in Mapper.class refers to term runtime in package scala.reflect which is not available.

sta dicendo che scala.reflect.runtime non è presente nel classpath. E, in effetti, dopo aver controllato /tmp/scala-maven-6314934214401019063.args, non era nei classpath elencati qui.

Slick 2.10 ha dipendenze dal pacchetto di riflessione Scala. Vedi https://github.com/slick/slick/blob/master/src/main/scala/scala/slick/direct/MetadataProvider.scala. Quindi, il POM per Slick dovrebbe elencare scala-reflect in modo che altri progetti possano risolverlo come una dipendenza transitiva. Tuttavia, slick_2.10-1.0.1.pom non elenca scala-reflect.

L'aggiunta di scala-reflect come dipendenza nel mio progetto POM ha risolto questo problema.

+0

Sto avendo lo stesso, ma all'interno di un progetto multi-modulo, e la classe mancante è una classe che appartiene a uno dei miei moduli (e infatti è lì). Qualche suggerimento? – Edmondo1984

+0

Assicurati che il modulo che dipende dalla classe mancante abbia il modulo che contiene la dipendenza da Maven POM. Se è impostato, esegui Maven in modalità debug (opzione -X) e controlla il file ".args" nel comando maven-scala-plugin (vedi la fine del comando java nella mia domanda). Quel file args dovrebbe contenere il jar con la tua dipendenza nel suo classpath. In caso contrario, è necessario trovare un modo per farlo lì. Sono stato in grado di farlo aggiungendo una dipendenza al mio POM. – lreeder

+1

In realtà ho trovato il problema. Se si hanno due oggetti pacchetto scala con lo stesso nome (e gerarchia diversa), questo non viene compilato. – Edmondo1984

Problemi correlati