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

Eva*_*den 23 gwt guava

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

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

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

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

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

import javax.annotation.Nullable;

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

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

PS - 你在那边使用什么版本的Java?

sly*_*7_7 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:这仍然是一个恼人的问题:鉴于缺乏明显的进展,将JSR-305内容整合到今天的项目中的未来发展方式是什么? (7认同)

Bla*_*ade 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>
Run Code Online (Sandbox Code Playgroud)

更新:用户@ips建议添加,<scope>provided</scope>因为在运行时不需要jsr305 jar,并且更新到版本2.0.1.我知道第一个改变是有道理的,我想版本更新也是如此.根据我的经验,使用<scope>provided</scope>Scala创建的问题,但这是一个单独的问题.


Tom*_*mer 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 {

}
Run Code Online (Sandbox Code Playgroud)

将行添加到MyProject.gwt.xml:

<super-source path="annotation"/>
Run Code Online (Sandbox Code Playgroud)

你很高兴去.