【问题标题】:Exception ClassNotFound when grails .war file runs on different JDK than it was built with当 grails .war 文件在与构建时不同的 JDK 上运行时出现异常 ClassNotFound
【发布时间】:2016-03-13 18:11:34
【问题描述】:

当我执行“grails war”时,grails 会为我构建一个战争文件。我将它部署到 tomcat 的 webapps 文件夹中,它运行良好 - 如果我构建战争并使用相同的 JDK 运行 tomcat。

如果我在 JDK7 上构建运行 grails 的 war 文件并将它们部署到 JDK8 上的 tomcat 中,我会遇到问题 - 在 API 请求期间,我收到错误:java.lang.NoClassDefFoundError: java/util/HashMap$Entry

似乎JDK7中的这个类被编译到war中(或对它的引用),在JDK8上运行时找不到它。

有没有办法让 grails 将定义拉入类中,以便使用 7 构建的战争可以在 8 上运行 - 就像你可以使用 bootclasspath 和 extdirs 使用 javac 一样,也许。

有没有办法用 7 构建并在 8 上运行(以及 jdk 7)?

【问题讨论】:

  • 在这里更具体会很有帮助。调用如何“失败”?
  • 嗨詹姆斯,我添加了一些关于失败的细节:它正在寻找一个来自 JDK7 的类,战争是用它编译的,并且在 8 时会破坏它。

标签: java tomcat grails


【解决方案1】:

始终可以将旧版本文件运行到最新的新版本,例如您可以在 JDK-8 中运行 JDK-7 文件,但 JDK-8 文件不会在 JDK-7 中运行

为避免此问题,请在旧版本中编译所有 JDK 文件,例如使用 JDK-7 编译所有 JDK-8 文件或使用一个 JDK 环境

【讨论】:

  • 请注意,在我的问题中,我特别提到在 7 中建立战争并在 8 中运行不起作用
  • 您的系统是 32 位还是 64 位,您要部署的系统呢?
  • 在同一系统上构建和部署:macbook pro (Mavericks - 64 bit)
  • 哪个JDK环境变量设置为JAVA_HOME,Tomcat使用哪个JDK?
  • 您好 Ghayel,感谢您的帮助。我用 jdk 1.7.0_80 构建战争并在 jdk1.8.0_60 上运行 tomcat
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 2015-04-14
  • 2023-03-12
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多