我有以下scala文件:
object SGuavaTryout {
com.google.common.cache.CacheBuilder.newBuilder()
}我在类路径中使用guava-11.0.2.jar进行编译。我的scala 2.9.1编译器( eclipse插件和普通scalac)报告:
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)要进行编译,我需要将jsr305 (jsr305-1.3.9.jar)添加到构建路径。java的等价物在没有jsr305的情况下编译得很好:
public class JGuavaTryout {
public void tryout() {
com.google.common.cache.CacheBuilder.newBuilder();
}
}你知道为什么scala需要jsr305吗?有没有官方的jsr305实现可以和guava一起使用?
谢谢!-乔治
发布于 2012-04-04 18:20:31
这是因为Scala编译器的设计方式,它要求类公开的所有类型在编译时都可用,而Java编译器实际上并不关心。
发布于 2012-04-04 22:28:40
Sean Parson回答了你的第一个问题,解释了为什么Scala需要JSR305依赖。
至于与Guava一起使用的“官方”JSR305实现,我将使用他们在pom.xml中声明的实现
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>1.3.9</version>
</dependency>如果您使用的是Maven,我认为它会自动将依赖项添加到类路径。
注意:您可以直接从Maven Central repository下载jar。
发布于 2014-01-01 19:32:46
您可以添加此依赖项:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.3</version>
<scope>provided</scope>
</dependency>因此,编译将会正常工作,而不会到达最终版本。
https://stackoverflow.com/questions/10007994
复制相似问题