【问题标题】:Guava r07, GWT and javax.annotation.NullableGuava r07、GWT 和 javax.annotation.Nullable
【发布时间】:2010-09-26 22:10:07
【问题描述】:

我试图在 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 无法解析为类型
  • ...

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

导入 javax.annotation.Nullable;

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

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

附: - 你用的是什么版本的Java?

【问题讨论】:

  • 您绝对 100% 不应该自己去寻找 jsr305 罐子! guava-gwt.jar 应该开箱即用,因此请提供有关您正在尝试什么以及正在发生什么的详细信息; “我得到了一个堆栈跟踪列表”——究竟来自什么?
  • @Kevin,当我做同样的事情并尝试编译时,我得到:编译模块 com.restphone.LingoGwt 验证新编译的单元 [错误] 'jar:file:/Users/ 中的错误james/lib/guava-r08/guava-r08-gwt.jar!/com/google/common/base/Equivalence.java' [错误] 第 20 行:无法解析导入 javax.annotation [错误] 第 51 行:可为空无法解析为类型 [ERROR] 第 51 行:Nullable 无法解析为类型 [ERROR] 第 60 行:Nullable 无法解析为类型
  • 截至本文发布时,r09 中尚未修复此问题,您仍然需要手动将 jsr305 依赖项添加到 Maven!
  • 我在基于 Guava r08 编译 Caliper 时遇到了这个问题。我切换到 r09 并没有工作,然后切换到 10.0.1 并且它还自动下载了 JSR305 依赖项。

标签: gwt guava


【解决方案1】:

嗯...我认为您正在寻找的是 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 内容集成到当今项目中的面向未来的方法是什么?
  • 查看其他答案以获得部分解决方案。
【解决方案2】:

如上所述,使用 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 建议添加&lt;scope&gt;provided&lt;/scope&gt;,因为运行时不需要jsr305 jar,并更新到版本2.0.1。我知道第一个更改是有道理的,我猜版本更新也是如此。 根据我的经验,使用 &lt;scope&gt;provided&lt;/scope&gt; 会给 Scala 带来问题,但这是一个单独的问题。

【讨论】:

    【解决方案3】:

    您需要获取 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"/>
    

    你可以走了。

    【讨论】:

    • 谢谢,为我解决了这个问题...现在让我们检查一下它是否物有所值^^
    • 我只需要一个 javax.annotation.Annotation.gwt.xml 文件:&lt;module rename-to='Annotation'&gt; &lt;source path=''/&gt; &lt;/module&gt;,当然在我的项目 .gwt.xml 文件中继承它。从here得到这个技巧
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多