Why do I need jsr305 to use guava in scala?

guava, scala

Solution

That's because of the way the Scala compiler is designed, it requires all the types exposed by a class to be available at compile time, whereas the Java compiler effectively doesn't care.

Problem

I have the following scala file: ``` object SGuavaTryout { com.google.common.cache.CacheBuilder.newBuilder() } ``` I compile with guava-11.0.2.jar in the classpath. My scala 2.9.1 compiler (both eclipse plugin and plain scalac) complains: ``` 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) ``` To compile, I need to add jsr305 (jsr305-1.3.9.jar) to the build path. The java equivalent compiles just fine without jsr305: ``` public class JGuavaTryout { public void tryout() { com.google.common.cache.CacheBuilder.newBuilder(); } } ``` Any ideas why scala requires jsr305? Is there an official jsr305 implementation to use with guava? Thanks! - Georg

Original source