2012-04-04 8 views
19

tengo el siguiente archivo de Scala:¿Por qué necesito jsr305 para usar guayaba en scala?

object SGuavaTryout { 
    com.google.common.cache.CacheBuilder.newBuilder() 
} 

compilo con guayaba-11.0.2.jar en la ruta de clase. Mi Scala 2.9.1 compilador (ambos plug-in de Eclipse y scalac llanura) se queja:

error while loading CacheBuilder, Missing dependency 
    'class javax.annotation.CheckReturnValue', required by 
    D:\devel\eclipse-workspace\Scala Spielwiese\guava-11.0.2.jar 
    (com/google/common/cache/CacheBuilder.class) 

Recopilar, tengo que añadir JSR305 (jsr305-1.3.9.jar) a la trayectoria de la estructura. El equivalente Java compila bien sin JSR305:

public class JGuavaTryout { 
    public void tryout() { 
    com.google.common.cache.CacheBuilder.newBuilder(); 
    } 
} 

Cualquier idea por qué Scala requiere JSR305? ¿Hay una implementación oficial jsr305 para usar con guayaba?

Gracias! - Georg

Respuesta

21

Eso es por la forma en que está diseñado el compilador de Scala, requiere que todos los tipos expuestos por una clase estén disponibles en tiempo de compilación, mientras que al compilador de Java no le importa.

+2

El compilador de Java específicamente no se preocupa por los tipos de anotación, pero creo que todos los demás tipos deben estar disponibles. –

+2

Scala 2.11.1 y superior ahora manejan las anotaciones faltantes con gracia; ya no necesitas jsr305 en el classpath. – retronym

21

Sean Parsons respondió su primera pregunta, explicando por qué Scala requiere la dependencia de JSR 305.

En cuanto a la "oficial" JSR 305 para usar con la aplicación de guayaba, que haría uso de la que ellos declaran en su pom.xml:

<dependency> 
    <groupId>com.google.code.findbugs</groupId> 
    <artifactId>jsr305</artifactId> 
    <version>1.3.9</version> 
</dependency> 

Si estaba utilizando Maven, creo que sería añadir la dependencia a la ruta de clase de forma automática.

Nota: puede descargar el jar directamente desde el Maven Central repository.

+8

Agregaría que poner el dep en el alcance 'provisto' satisface scalac y la lib no se incluye en los resultados del paquete. – ron

6

puede añadir esta dependencia:

<dependency> 
    <groupId>com.google.code.findbugs</groupId> 
    <artifactId>jsr305</artifactId> 
    <version>2.0.3</version> 
    <scope>provided</scope> 
</dependency> 

así la compilación va a funcionar y esto no llegará a la versión final.

Cuestiones relacionadas