【问题标题】:jmockit 0.999.11 not recognizing jdk 8 on Windows OSjmockit 0.999.11 在 Windows 操作系统上无法识别 jdk 8
【发布时间】:2015-06-02 07:08:48
【问题描述】:

我们的项目使用 jmockit 0.999.11 来模拟 JUnit 4.11 和 TestNG 6.9.4 测试类和套件的对象。我们使用 Maven 作为依赖管理工具,用于编译和执行这些测试用例(Windows 操作系统)。

最近,我们将项目从 JDK 7 迁移到 JDK 8 (1.8.0.25)。从那时起,当我尝试执行测试用例时,jmockit 给我一个错误提示

运行测试套件

java.lang.IllegalStateException:JMockit 需要 Java 5 VM 或更高版本。

我查看了有关此的各种博客,并确保类路径在 junit jar 之前有 jmockit jar。有关添加 jdk tools.jar 的其他说明特定于 Mac OS。

所以我无法弄清楚还需要什么才能使 jmockit 0.999.11 能够成功识别 JDK 8 (u25)。升级 JMockit jar 将是我们最后的手段,我们希望尽可能避免它。

【问题讨论】:

标签: jmockit


【解决方案1】:

总而言之,您需要升级到更高版本的 jmockit。当 jmockit 启动时,它会在 AgentInitialization 中使用这段代码:

boolean initializeAccordingToJDKVersion() {
   String jarFilePath = discoverPathToJarFile();

   if (Startup.jdk6OrLater) {
      return new JDK6AgentLoader(jarFilePath).loadAgent();
   } else if ("1.5".equals(Startup.javaSpecVersion)) {
      throw new IllegalStateException("JMockit has not been initialized. Check that your Java 5 VM has been started with the -javaagent:" +
            jarFilePath + " command line option.");
   } else {
      throw new IllegalStateException("JMockit requires a Java 5 VM or later.");
   }
}

并且 Startup.jdk6OrLater 确定:

static final boolean jdk6OrLater = ("1.6".equals(javaSpecVersion)) || ("1.7".equals(javaSpecVersion));

public static boolean isJava6OrLater() {
    return jdk6OrLater;
}

你可以看到问题。在他们选择硬编码高于 1.5 的版本时,我会让他们受益,但这仍然令人沮丧。

看起来 1.8 可以与 Java 8 一起使用。可能有更早的版本也可以,但 1.8 对我的同龄人有用,所以我决定坚持使用它。或者,降级到 Java 7 也应该可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2018-08-02
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多