番石榴r07,GWT和javax.annotation.Nullable

时间:2010-09-26 22:10:08

标签: gwt guava

我试图在GWT项目中使用Guava但没有成功(准确地说是HashMultimap)。我得到了一个永无止境的类堆栈跟踪列表:

  • com.google.common.collect.ComparisonChain
  • com.google.common.collect.ForwardingSortedSetMultimap
  • com.google.common.collect.Ordering
  • ...

每个堆栈跟踪沿着以下行:

  • 行xx:无法解析导入javax.annotation
  • 行xx:Nullable无法解析为类型
  • 行xx:Nullable无法解析为类型
  • 行xx:Nullable无法解析为类型
  • ...

查看代码,每个抛出错误的文件包括:

  

import javax.annotation.Nullable;

并且,查看guava-src-r07.jar,每个提到的类都使用@Nullable注释。

我正在使用JDK6并查看JDK6 javadoc并且......好吧,我找不到任何这样的注释。我可以让这些库与GWT项目和JDK6一起使用吗?

P.S。 - 您在那里使用的是哪个版本的Java?

3 个答案:

答案 0 :(得分:14)

嗯......我认为这是你正在寻找的jsr305。看看

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"/>

你很高兴。