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이로드를 거부했기 때문에 도움이되지 않았습니다.
안타깝게도 1.7에서 컴파일하면 더 오래된 버전에서는 실행되지 않으므로 추가 한 코드가 실제로 실행되지 않습니다 (슬픈 얼굴). -target 1.6
플래그를 사용하여 이전 버전과 비교하여 컴파일 할 수 있습니다. 그러나 귀하의 게시물에서 1.7의 기능이 필요하다고 생각됩니다. 그래서 아마 당신은 자바의 오래된 버전에 대해 컴파일 된 "래퍼"응용 프로그램을 작성하고, 검사를 수행 한 다음 항아리를로드하고 실행할 수도 있습니다. 또는 어떤 종류의 스크립트를 사용하여 동일한 결과를 얻을 수도 있습니다.
this question도 참조하십시오.
이전 버전을 지정하는 jar를 컴파일 할 수 있습니다.
Check this link for further detail. 나는 같은 요구 사항을 가지고 있고 그것을 다음과 같은 방법으로 해결 :
절대적으로 새로운 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은 (어떤 자바 버전이 타겟으로 또는) 자바 1.2에서 사용할 수없는 응용 프로그램이나 클래스에
어떤 수입을 포함하지 않는합니다.
그런 다음
-source 1.2 -target 1.2
와
MyStarter
(그리고
만 클래스가) 일반 컴파일러 (예를 들어 Java7 class 파일을 생성)와 클래스의 나머지 부분을 컴파일 컴파일합니다.
실행 가능한 jar를 생성하는 경우 com.foo.MyStarter
을 Main-Class:
속성으로 추가하십시오.
<-- 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 파일에 모든 것을 넣어 :
내 내 개미 build.xml
에서 "컴파일"목표는 다음과 같이 보인다.
니스 - 래퍼 어플리케이션이 의미하는 바입니다. :) – selig
Java Web Start 기술을 사용하여 소프트웨어를 배포하는 것이 좋습니다. 그런 다음 jnlp 파일에서 응용 프로그램이 지원하는 정확한 Java 버전을 지정할 수 있습니다.
특히 최소한의 자바 버전은 j2se 요소에 선언되어 있습니다.예를 들어
:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
<information>
<title>Dynamic Tree Demo</title>
<vendor>Dynamic Team</vendor>
<icon href="sometree-icon.jpg"/>
<offline-allowed/>
</information>
<resources>
<!-- Application Resources -->
<j2se version="1.6+" href=
"http://java.sun.com/products/autodl/j2se"/>
<jar href="DynamicTreeDemo.jar"
main="true" />
</resources>
<application-desc
name="Dynamic Tree Demo Application"
main-class="webstartComponentArch.DynamicTreeApplication"
width="300"
height="300">
</application-desc>
<update check="background"/>
</jnlp>
당신은 이미 1.7 이상에서이 문제를 실행할 수 있습니다 관찰. 1.7을 사용하여 1.6 용으로 컴파일 된 jar를 실행할 수는 있지만 그 반대는 아닙니다. 따라서 귀하의 수표는 불필요합니다. – Ingo
1.7 및 호환성 체크에 대한 더 자세한 정보는 http://www.oracle.com/technetwork/java/javase/compatibility-417013.html –