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

问题描述

| 我正在尝试在学习的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之类的类。问题不是我! 我在哪里可以找到这些课程,还是从一开始就采取了错误方法? 谢谢 理查德     

解决方法

RichFaces依赖项的Maven配置 Tomcat无法加载这些类,因为RichFaces对Guava的依赖具有运行时范围。与编译范围相反,这些依赖项在编译时不会添加到类路径中。您必须自己包括它们。 为此,您应该在POM的依赖管理部分中包含richfaces-bom,如本JBoss Wiki文章中所述。这将包括Guava和RichFaces可能需要的所有其他必需依赖项。 这是“物料清单”(BOM)模式。 JBoss Wiki比我对这种模式的解释要好得多,并且链接到该主题的其他文章。 番石榴源中的
javax.annotation.Nullable
警告 发生这些是因为Guava使用JSR 305批注。使用Guava时不需要依赖JSR 305 jar,因为一旦编译后,注释就不需要出现在类路径上。当然,如果您想在代码中使用ѭ3和其他此类注释(您肯定应该这样做),则需要在JSR 305 jar上添加依赖项。     ,我从头开始使用jboss.org上的说明进行操作 我安装了Maven 3.0.3 我将提供的settings.xml复制到了我的.m2目录,并从1添加了JBOSS部分 我使用命令行创建了项目: mvn原型:generate -DarchetypeGroupId = org.richfaces.archetypes \\                            -DarchetypeArtifactId = richfaces-archetype-simpleapp \\                            -DarchetypeVersion = 4.0.0-快照\\                            -DgroupId = uk.m0rjc \\                            -DartifactId = jsfplay 然后,我构建了该项目。我必须从m2存储库中删除以前下载的番石榴罐,因为它们已损坏-也许是我最初的问题。 mvn清洁包装 我将生成的WAR文件复制到Tomcat,并导航到localhost:8080 / jsfplay-1.0-SNAPSHOT / 我在使项目在Eclipse中工作时遇到了一些问题。这些可能是由于我根据之前的实验而设置的。 我使用“导入-> Maven->现有Maven项目\”将其导入 我不得不将项目切换到JDK 1.6和1.6兼容模式。 我无法使用JavaServer Faces方面。这似乎无关紧要。 我必须设置服务器配置文件以使用正确的JDK 我必须将* .xhtml映射到web.xml中的Faces Servlet。当我按下错误的按钮接受JSF插件时,它可能已损坏。 然后它起作用了! 现在尝试将现有代码移植到新项目中。