190 votes

Obtenir la version de java au runtime

J'ai besoin d'écrire du code Java indépendant de la version, à cause de quelques bugs dans JDK 1.5 qui ont été corrigés dans JDK 1.6, j'utilise maintenant la condition suivante:

 if (System.getProperty("java.version").startsWith("1.5.")) {
...
} else{
...
}
 

Y a-t-il une autre possibilité de vérifier cela? Cela fonctionnera-t-il pour JVM d'IBM?

171voto

Aaron Digulla Points 143830

java.version est une propriété standard qui existe dans chaque machine virtuelle.

Une petite astuce pourrait vous faciliter la vie: recherchez le deuxième point et coupez-y la ficelle. Puis convertissez-le en double . Maintenant, vous pouvez vérifier la version beaucoup plus confortablement:

 if (version >= 1.5) ...
 

Vous pouvez mettre cela dans le code statique d'une classe pour qu'elle ne s'exécute qu'une seule fois:

 public static double JAVA_VERSION = getVersion ();

static double getVersion () {
    String version = System.getProperty("java.version");
    int pos = 0, count = 0;
    for ( ; pos<version.length() && count < 2; pos ++) {
        if (version.charAt(pos) == '.') count ++;
    }
    return Double.parseDouble (version.substring (0, pos));
}
 

64voto

Stefan Points 3186

Qu'en est-il d'obtenir les informations à partir des informations méta du paquet:

 Runtime.class.getPackage().getImplementationVersion();
 

Imprime quelque chose comme:

1.7.0_13

44voto

polygenelubricants Points 136838

Ces articles semblent suggérer que la vérification de 1.5 ou 1.6 préfixe doit travailler, où l'on suit la bonne version de convention de nommage.

Soleil D'Articles Techniques

34voto

mvanle Points 152

Le moyen le plus simple ( java.specification.version ):

 Double version = Double.parseDouble(System.getProperty("java.specification.version"));

if (version == 1.5) {
    // 1.5 specific code
} else {
    // ...
}
 

ou quelque chose comme ( java.version ):

 String[] javaVersionElements = System.getProperty("java.version").split("\\.");

int major = Integer.parseInt(javaVersionElements[1]);

if (major == 5) {
    // 1.5 specific code
} else {
    // ...
}
 

ou si vous voulez tout casser ( java.runtime.version ):

 String discard, major, minor, update, build;

String[] javaVersionElements = System.getProperty("java.runtime.version").split("\\.|_|-b");

discard = javaVersionElements[0];
major   = javaVersionElements[1];
minor   = javaVersionElements[2];
update  = javaVersionElements[3];
build   = javaVersionElements[4];
 

8voto

Alessandro Points 81

Ne fonctionne pas, il faut --pos pour évaluer le double:

     String version = System.getProperty("java.version");
    System.out.println("version:" + version);
    int pos = 0, count = 0;
    for (; pos < version.length() && count < 2; pos++) {
        if (version.charAt(pos) == '.') {
            count++;
        }
    }

    --pos; //EVALUATE double

    double dversion = Double.parseDouble(version.substring(0, pos));
    System.out.println("dversion:" + dversion);
    return dversion;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X