2013-06-27 2 views
6

jdk 1.7을 사용하여 컴파일 된 jar 파일이 있습니다.로드 시간 동안 Jar 파일이 실행되고있는 Java 런타임 환경이 1.7 이상인지 확인하고 싶습니다. 그렇게 할 수있는 방법이 있습니까?자바 버전 호환성 확인

System.getProperty ("java.version")를 사용해 보았지만 클래스 버전이 51이었고 jre 1.6이로드를 거부했기 때문에 도움이되지 않았습니다.

+6

당신은 이미 1.7 이상에서이 문제를 실행할 수 있습니다 관찰. 1.7을 사용하여 1.6 용으로 컴파일 된 jar를 실행할 수는 있지만 그 반대는 아닙니다. 따라서 귀하의 수표는 불필요합니다. – Ingo

+2

1.7 및 호환성 체크에 대한 더 자세한 정보는 http://www.oracle.com/technetwork/java/javase/compatibility-417013.html –

답변

6

안타깝게도 1.7에서 컴파일하면 더 오래된 버전에서는 실행되지 않으므로 추가 한 코드가 실제로 실행되지 않습니다 (슬픈 얼굴). -target 1.6 플래그를 사용하여 이전 버전과 비교하여 컴파일 할 수 있습니다. 그러나 귀하의 게시물에서 1.7의 기능이 필요하다고 생각됩니다. 그래서 아마 당신은 자바의 오래된 버전에 대해 컴파일 된 "래퍼"응용 프로그램을 작성하고, 검사를 수행 한 다음 항아리를로드하고 실행할 수도 있습니다. 또는 어떤 종류의 스크립트를 사용하여 동일한 결과를 얻을 수도 있습니다.

this question도 참조하십시오.

0

이전 버전을 지정하는 jar를 컴파일 할 수 있습니다.

7

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.2MyStarter (그리고 클래스가) 일반 컴파일러 (예를 들어 Java7 class 파일을 생성)와 클래스의 나머지 부분을 컴파일 컴파일합니다.

실행 가능한 jar를 생성하는 경우 com.foo.MyStarterMain-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에서 "컴파일"목표는 다음과 같이 보인다.

+0

니스 - 래퍼 어플리케이션이 의미하는 바입니다. :) – selig

0

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> 

See this link for more information