当前位置: 首页 > 知识库问答 >
问题:

验证java版本兼容性

侯令雪
2023-03-14

我有一个使用JDK1.7编译的jar文件,我想在加载时检查一下我的jar运行的java运行时环境是否是1.7或更新的。有办法做到这一点吗?

我尝试使用System.getProperty(“java.version”),但这没有帮助,因为我的类版本是51,而JRE1.6拒绝加载它。

共有1个答案

冯枫涟
2023-03-14

我也有同样的要求,我通过以下方式解决了它:

拥有一个“Startup”类,它对任何新的JDK类或应用程序的任何类都没有任何依赖(=导入)。你没按名字导入主类!

类似于:

如果检查成功,则使用反射加载主类,并启动它的主方法(或您使用的任何方法)。类似这样的事情:

public class MyStarter
{
   public static void main(String[] args)
   {
      String version = System.getProperty("java.version", null);
      boolean isVersionOK = ... ; 

      if (!isVersionOK)
      {
         System.err.println("Wrong Java version detected");
         // or display some messagebox using JOptionPane
         System.exit(1);
      }

      Class mainClass = Class.forName("com.foo.MyMain");
      Method main = mgr.getDeclaredMethod("main", new Class[] { String[].class });
      main.invoke(null, new Object[] { args });
   }
}

再次强调:确保MyStarter不包含任何在Java1.2(或任何您要目标的Java版本)中不可用的对应用程序或类的导入。

然后用-source1.2-target1.2编译mystarter(并且只编译那个类),用常规编译器编译其余的类(例如,创建Java7.class文件)。

如果生成一个可html" target="_blank">执行jar,那么添加com.foo.mystarter作为main-class:属性。

Antbuild.xml中的“compile”目标如下所示:

<-- compile the starter class for Java 1.2 -->
<javac destdir="${build}"
       srcdir="${src}"
       target="1.2"
       source="1.2"
       encoding="ISO-8859-1"
       includeantruntime="false"
       includes="com/foo/MyStarter.java"/>  

<-- compile the rest with for Java 1.6 -->
<javac destdir="${build}"
       srcdir="${src}"
       target="1.6"
       source="1.6"
       includeantruntime="false"
       encoding="ISO-8859-1">
  <exclude name="com/foo/MyStarter.java"/>
  <classpath>
      ....
  </classpath>
</javac>

然后将所有内容放入一个jar文件中。

 类似资料:
  • 我正在使用生成cacerts。 然后我使用,但我会遇到这样的例外: 这是兼容性问题吗?使用一个版本的java生成的Cacert是否与另一个版本的java不兼容?

  • 这本书讲述的是 Swift 5.1,它是 Xcode 11 中包含的默认版本。你可以使用 Xcode 11 来编译用 Swift 5.1、Swift 4.2 或 Swift 4 写的代码。 当你使用 Xcode 11 编译 Swift 4 和 Swift 4.2 代码时,大部分 Swift 5.1 的功能是可用的。也就是说,下面的变更仅对 Swift 5.1 或后续版本生效: 返回不透明类型的函数

  • 我目前安装了Java8(更新171)和Oxygen.3a(4.7.3a)(Eclipse版本)。我以前下载过Java10,但我读到有一个bug,WindowBuilder不能在该版本上工作,它被推荐为版本8,这是我下载并安装的版本(在卸载版本10后)。但问题还在。 我能做些什么来解决这个问题?谢谢你。

  • 支持的版本 主版本 PHP兼容性 初始发行 支持 PHPUnit 9 PHP 7.3, PHP 7.4 2020年2月7日 支持将于2022年2月4日结束 PHPUnit 8 PHP 7.2, PHP 7.3, PHP 7.4 2019年2月1日 支持将于2021年2月5日结束 之前的版本 主版本 PHP兼容性 初始发行 支持 PHPUnit 7 PHP 7.1, PHP 7.2, PHP 7.3

  • 通过graphdb启动独立版本时。cmd给出了以下消息:“这个GraphDB发行版需要Java 8、11或12,但您有Java 15”。但是,启动成功,GraphDB WorkBench可以启动。当我继续运行基于(开放式)Java15的系统时,我是否需要在未来的使用中预期一些“隐藏”的问题?

  • 问题内容: 我刚刚安装了Eclipse Oxygen并创建了一个JFrame项目。从源视图切换到设计视图时,出现“不兼容的Java版本错误”。 完全错误Desc:Eclipse在0以下运行,但是此Java项目的Java兼容级别为10,因此WindowBuilder将无法从该项目中加载类。对项目使用较低级别的Java,或使用较新的Java版本运行Eclipse。 我在Windows中检查了版本->首