【发布时间】: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 7 和 JDK 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