验证java版本兼容性
发布时间:2020-12-14 23:34:27 所属栏目:Java 来源:网络整理
导读:我有一个使用jdk 1.7编译的jar文件,我想在加载时检查我的jar运行的 java运行时环境是1.7还是更新.有没有办法做到这一点? 我尝试使用System.getProperty(“java.version”),但这没有帮助,因为我的类版本是51和jre 1.6拒绝加载它. 解决方法 我有同样的要求,我
我有一个使用jdk 1.7编译的jar文件,我想在加载时检查我的jar运行的
java运行时环境是1.7还是更新.有没有办法做到这一点?
我尝试使用System.getProperty(“java.version”),但这没有帮助,因为我的类版本是51和jre 1.6拒绝加载它. 解决方法
我有同样的要求,我通过以下方式解决了它:
有一个“启动”类,它对任何新的JDK类或任何应用程序的类都没有依赖关系(= imports).你不要通过名字导入你的主类! 就像是: 在该入门类中,检查所需的Java版本. 如果检查成功,则使用反射加载主类并启动它的主方法(或您使用的任何方法).像这样的东西: 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不包含任何导入到您的应用程序或Java 1.2中不可用的类(或您将要定位的任何Java版本). 然后用-source 1.2 -target 1.2编译MyStarter(并且只有那个类) 如果生成可执行jar,则将com.foo.MyStarter添加为Main-Class:属性. 我的Ant build.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文件中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |