我有以下scala文件:
object SGuavaTryout {
com.google.common.cache.CacheBuilder.newBuilder()
}
Run Code Online (Sandbox Code Playgroud)
我在类路径中使用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)
Run Code Online (Sandbox Code Playgroud)
要编译,我需要将jsr305(jsr305-1.3.9.jar)添加到构建路径.没有jsr305的java等价编译就好了:
public class JGuavaTryout {
public void tryout() {
com.google.common.cache.CacheBuilder.newBuilder();
}
}
Run Code Online (Sandbox Code Playgroud)
scala需要jsr305的任何想法?是否有官方的jsr305实现与番石榴一起使用?
谢谢! - 乔治
Sea*_*ons 21
这是因为Scala编译器的设计方式,它要求类所公开的所有类型在编译时可用,而Java编译器实际上并不关心.
Eti*_*veu 21
Sean Parsons回答了你的第一个问题,解释了为什么Scala需要JSR 305依赖.
至于与Guava一起使用的"官方"JSR 305实现,我将使用他们在pom.xml中声明的那个:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>1.3.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Maven,我认为它会自动将依赖项添加到类路径中.
注意:您可以直接从Maven Central存储库下载jar .
您可以添加此依赖项:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.3</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
因此编译将起作用,这将不会到达最终版本.
归档时间: |
|
查看次数: |
5877 次 |
最近记录: |