java.lang.IllegalArgumentException:duplicate key:class javax.faces.convert.DoubleConverter

时间:2013-06-12 12:24:08

标签: jsf tomcat richfaces

我的设置是java 1.6.0_45,richfaces 4.3.2,jsf 2.1.5,tomcat 7.0.30,在IntelliJ IDEA 11中。

我面临以下例外:

  java.lang.IllegalArgumentException: duplicate key: class javax.faces.convert.DoubleConverter
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:115)
        at com.google.common.collect.RegularImmutableMap.<init>(RegularImmutableMap.java:72)
        at com.google.common.collect.ImmutableMap$Builder.fromEntryList(ImmutableMap.java:221)
        at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:207)
        at org.richfaces.javascript.ClientServiceConfigParser.parseConfig(ClientServiceConfigParser.java:54)
    ...

我在这里搜索过,我发现的最接近的问题是:

- Herehere

这两个帖子基本上都解决了同一个问题。 csv.xml文件在项目的/WEB-INF/lib文件夹中的多个JAR中被引用。我写了一个小脚本来'jar tf'我的lib目录中的每个文件将输出汇总到csv.xml的grep,它只显示一个条目。

以下是我的/WEB-INF/lib文件夹的屏幕截图:

为什么我仍然会遇到此异常,我该如何解决?

我使用的类路径如下:

-classpath "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/deploy.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/dt.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/javaws.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/jce.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/jconsole.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/management-agent.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/plugin.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/sa-jdi.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/alt-rt.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/alt-string.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/apple_provider.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/dnsns.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/localedata.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunjce_provider.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunpkcs11.jar:/data/devl/projects/cannon/register/web/WEB-INF/classes:/data/devl/apache-tomcat-7.0.30/bin/tomcat-juli.jar:/data/devl/apache-tomcat-7.0.30/bin/bootstrap.jar:/data/devl/apache-tomcat-7.0.30/bin/commons-daemon.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-coyote.jar:/data/devl/apache-tomcat-7.0.30/lib/annotations-api.jar:/data/devl/apache-tomcat-7.0.30/lib/el-api.jar:/data/devl/apache-tomcat-7.0.30/lib/jasper-el.jar:/data/devl/apache-tomcat-7.0.30/lib/ecj-3.7.2.jar:/data/devl/apache-tomcat-7.0.30/lib/jasper.jar:/data/devl/apache-tomcat-7.0.30/lib/servlet-api.jar:/data/devl/apache-tomcat-7.0.30/lib/catalina-ha.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-api.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-dbcp.jar:/data/devl/apache-tomcat-7.0.30/lib/jsp-api.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-util.jar:/data/devl/apache-tomcat-7.0.30/lib/catalina.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-jdbc.jar:/data/devl/apache-tomcat-7.0.30/lib/catalina-tribes.jar:/data/devl/apache-tomcat-7.0.30/lib/catalina-ant.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-i18n-es.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-i18n-fr.jar:/data/devl/apache-tomcat-7.0.30/lib/tomcat-i18n-ja.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/commons-beanutils-1.8.3.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/commons-codec-1.3.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/commons-collections-3.2.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/commons-digester-1.8.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/commons-logging-1.1.1.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/cssparser-0.9.5.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/guava-14.0.1.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/javax.faces-2.1.5.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/jhighlight-1.0.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/sac-1.3.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/richfaces-core-api-4.3.2.Final.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/richfaces-core-impl-4.3.2.Final.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/richfaces-components-api-4.3.2.Final.jar:/data/devl/projects/cannon/register/web/WEB-INF/lib/richfaces-components-ui-4.3.2.Final.jar:/Applications/IntelliJ IDEA 11.app/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain org.apache.catalina.startup.Bootstrap开始

只是为了踢,我运行了同样的脚本来搜索所有包含的tomcat路径中的'csv.xml',但没有发生。我认为在java home位置运行它会有点过分。

我还将项目导出为战争,但我仍然遇到同样的问题。我展开了war文件并查看/ WEB-INF / lib目录以查找以下内容:

这应该表明正在使用哪些罐子。根据我的判断,这些jar文件中没有一个与富脸库有任何冲突。我针对这个目录运行了我的csv.xml搜索脚本,并且它再次提出了一个条目。

2 个答案:

答案 0 :(得分:1)

webapp的运行时类路径不仅涵盖/WEB-INF/lib。它还包括服务器自己的/lib文件夹,以及“公共”和“共享”库,这些库是服务器特定的,可在服务器端配置。它还涵盖了JRE的/lib/lib/ext文件夹。

通常情况下,开发人员不会触及这些文件夹,肯定不是初学者。显然你已经在某个地方找到了RichFaces JAR的副本。至少,你有一个合适的/WEB-INF/lib确认这一事实,你继续得到这个例外的事实。要确定运行时类路径所涵盖的确切本地磁盘文件系统路径,请仅运行调试webapp中的这段代码,例如:在测试支持bean的构造函数中:

System.out.println("The current runtime classpath covers the following paths:");
for (URL url : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) {
   System.out.println(url);
}

另一个可能的原因是你没有运行你认为正在运行的代码。选择导出&gt;在IDE中使用WAR ,然后解压缩WAR并探索库。或者查看运行时服务器的deploy文件夹,并检查运行时实际使用的/WEB-INF/lib文件夹。也许您已经在某种程度上将项目配置为在构建期间从本地磁盘文件系统的其他位置包含其他JAR。我没有使用IntelliJ,但在Eclipse中,您可以在项目的 Deployment Assembly 属性中控制它。也许你曾经在无法尝试修复JSF和/或RichFaces库的编译/运行时问题这样的环境中摆弄,并且一旦你认为只是放弃/WEB-INF/lib中的JAR就忘了恢复/撤消这些设置将是正确的方式。

答案 1 :(得分:-1)

请选择IceFaces。它与处理这个垃圾一样强大而且容易得多!我放下了罐子,然后离开了。

相关问题