无法从Tomcat中运行的Guava r08加载类。无法从源代码编译。缺少javax.annotations

时间:2011-05-24 15:41:00

标签: java richfaces guava

我正在尝试在学习JSF应用程序中使用RichFaces。我已经使用

设置了Maven
https://repository.jboss.org/nexus/content/groups/public-jboss/

我已经包含了依赖项

    <dependency>
        <groupId>org.richfaces.ui</groupId>
        <artifactId>richfaces-components-ui</artifactId>
        <version>4.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.richfaces.core</groupId>
        <artifactId>richfaces-core-impl</artifactId>
        <version>4.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.richfaces.ui</groupId>
        <artifactId>richfaces-components-api</artifactId>
        <version>4.0.0.Final</version>
        <type>pom</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.richfaces.core</groupId>
        <artifactId>richfaces-core-api</artifactId>
        <version>4.0.0.Final</version>
        <type>pom</type>
        <scope>compile</scope>
    </dependency>

这已经取得了guava-r08.jar。

当我尝试在Tomcat7中运行项目时,我看到很多类加载异常 - 无法加载我在guava-r08.jar中可以看到的类以及sac-1.3和cssparser-0.9.5。

如果我尝试使用源代码 - 从guava-r09获取源代码 - Eclipse告诉我它找不到诸如javax.annotation.Nullable之类的类。问题也不是我!

我在哪里可以找到这些课程,或者我从一开始就采取了错误的方法?

由于

  • 理查德

2 个答案:

答案 0 :(得分:4)

RichFaces依赖项的Maven配置

Tomcat无法加载这些类,因为RichFaces对Guava的依赖性具有运行时范围。与编译范围相反,编译时不会将这些依赖关系添加到类路径中。你必须自己包括它们。

为实现此目的,您应该在POM的依赖关系管理部分中包含richfaces-bom,如in this JBoss wiki article所述。这将包括Guava和RichFaces可能需要的所有其他必需依赖项。

这是“物料清单”(BOM)模式。 The JBoss wiki比我更好地解释了这种模式,并链接到有关该主题的其他文章。


番石榴来源中的

javax.annotation.Nullable警告

这是因为Guava使用JSR 305 annotations。在使用Guava时,不需要依赖JSR 305 jar,因为编译后注释不需要出现在类路径上。当然,如果您想在代码中使用@Nullable和其他此类注释(您肯定应该这样做),则需要添加dependency on the JSR 305 jar

答案 1 :(得分:1)

我已经从头开始使用jboss.org

中的说明
  • 我安装了Maven 3.0.3
  • 我将提供的settings.xml复制到我的.m2目录,并从1
  • 添加了JBOSS部分
  • 我使用命令行创建项目:

    mvn archetype:generate -DarchetypeGroupId = org.richfaces.archetypes \                            -DarchetypeArtifactId = richfaces-archetype-simpleapp \                            -DarchetypeVersion = 4.0.0-SNAPSHOT \                            -DgroupId = uk.m0rjc \                            -DartifactId = jsfplay

  • 然后我构建了这个项目。我不得不从我的m2存储库中删除以前下载的番石榴罐子,因为它们已经损坏 - 也许是我最初的问题。

    mvn clean package

  • 我将它生成的WAR文件复制到Tomcat并导航到localhost的示例页面:8080 / jsfplay-1.0-SNAPSHOT /

我在Eclipse中使项目工作时遇到了一些问题。这可能是由于我之前的实验设置。

  • 我使用了“导入 - &gt; Maven - &gt;现有Maven项目”来导入它
  • 我不得不将项目切换到JDK 1.6和1.6兼容模式。
  • 我无法使用JavaServer Faces方面。这似乎并不重要。
  • 我必须将我的服务器配置文件设置为使用正确的JDK
  • 我必须将* .xhtml映射到web.xml中的Faces Servlet。当我按下错误的按钮接受JSF插件时,它可能已损坏。

然后它工作了!!

现在尝试将我现有的代码移植到新项目中。