我试图在GWT项目中使用Guava但没有成功(准确地说是HashMultimap)。我得到了一个永无止境的类堆栈跟踪列表:
每个堆栈跟踪沿着以下行:
查看代码,每个抛出错误的文件包括:
import javax.annotation.Nullable;
并且,查看guava-src-r07.jar,每个提到的类都使用@Nullable注释。
我正在使用JDK6并查看JDK6 javadoc并且......好吧,我找不到任何这样的注释。我可以让这些库与GWT项目和JDK6一起使用吗?
P.S。 - 您在那里使用的是哪个版本的Java?
答案 0 :(得分:14)
http://www.findjar.com/jar/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar.html
这里一定要好一点:http://code.google.com/p/guava-libraries/source/browse/#svn/trunk/lib 我在哪里看到@Nullable注释
答案 1 :(得分:12)
如上所述,使用guava 10.0.1时问题似乎得到了解决,它对JSR305库有额外的依赖性。
或者,要添加到Maven的缺失库的ID是com.google.code.findbugs:jsr305:1.3.9
,因此应该通过在适当的位置将以下依赖项添加到pom.xml来修复构建配置(警告 - 我没有测试此):
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
更新:用户@ips建议添加<scope>provided</scope>
,因为在运行时不需要jsr305 jar,并且更新到版本2.0.1
。我知道第一个改变是有道理的,我想版本更新也是如此。
根据我的经验,使用<scope>provided</scope>
为Scala创建了问题,但这是一个单独的问题。
答案 2 :(得分:5)
您需要获取JSR 305 JAR,但此外,您需要包含@Nullable
注释源代码作为GWT编译器的食物。
假设您的项目位于com/example/myproject/
下
创建文件:com/example/myproject/annotation/javax/annotation/Nullable.java
具有以下内容:
package com.example.myproject.annotation.javax.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifierNickname;
import javax.annotation.meta.When;
@Documented
@TypeQualifierNickname
@Nonnull(when = When.UNKNOWN)
@Retention(RetentionPolicy.RUNTIME)
public @interface Nullable {
}
将该行添加到MyProject.gwt.xml
:
<super-source path="annotation"/>
你很高兴。