【问题标题】:Tomcat 7 NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Tomcat 7 NoSuchMethodError:java.util.concurrent.ConcurrentHashMap.keySet()
【发布时间】:2017-07-17 09:20:41
【问题描述】:

我在 tomcat 7 上部署 Web 应用程序时遇到问题。该应用程序是使用 JDK 7 编译的,因此我通过在 /etc/default/tomcat7 中设置 JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80/ 将 tomcat 配置为使用 JDK 7。当我运行 top 时,我可以确认 tomcat 正在使用 java 7。但是当我尝试浏览应用程序时,我得到以下异常

java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
    at org.apache.catalina.core.ApplicationContext.getInitParameterNames(ApplicationContext.java:368)
    at org.apache.catalina.core.ApplicationContextFacade.getInitParameterNames(ApplicationContextFacade.java:367)
    at com.intel.mtwilson.jpa.PersistenceManager.contextInitialized(PersistenceManager.java:143)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1091)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1980)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

据我了解,此方法在 JDK 7JDK 8 中具有不同的返回类型,并且由于某种原因,即使将其配置为在 JDK 7 中运行,tomcat 仍在寻找 JDK 8 版本。原因是什么这?我是否必须配置其他任何东西才能使 tomcat 使用 JDK 7?

【问题讨论】:

  • 返回类型不影响方法签名
  • 只是为了确保我会想办法以某种方式打印 Java 版本。
  • 很高兴知道,但是我仍然不知道为什么缺少该方法
  • 可能是路径问题。你能用一个使用 keySet() 的控制台应用程序访问同一个 jvm 吗?
  • @GhostCat java -version 表示 Java(TM) SE Runtime Environment (build 1.7.0_80-b15) 并且进程列表中的路径与 JDK 7 路径匹配,将尝试从代码中以某种方式打印它并添加更新

标签: java tomcat tomcat7 concurrenthashmap nosuchmethoderror


【解决方案1】:

我认为问题在于您使用的 Tomcat 实际上并未使用 Java 7 编译。It looks like there are some Tomcat 7 builds floating around that were compiled with Java 8

您应该使用 Java 8。即使 Tomcat 是使用 Java 7 编译的,它也应该在 Java 8 上运行。

【讨论】:

  • 谢谢。就我而言,从 Ubuntu 软件包安装也不能使用 Java 7,而是使用 Java 8。现在有意义了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多