J'ai un fichier JAR compilé à l'aide de JDK 1.7, j'aimerais vérifier pendant la période de chargement que l'environnement d'exécution Java est mon pot en cours de 1,7 ou plus récent. Y a-t-il un moyen de faire ça? P>
J'ai essayé d'utiliser System.GetProperty ("Java.Version") mais cela n'a pas aidé depuis ma version de classe était 51 et JRE 1.6 refuse de le charger. P>
4 Réponses :
Malheureusement si c'est compilé sur 1.7, il ne sera pas exécuté sur quoi que ce soit plus vieux ... Donc, aucun code que vous ajoutez sera effectivement exécuté (visage triste). Vous pouvez le compiler contre une version plus ancienne à l'aide du drapeau voir Cette question aussi. P> -Target 1.6 code>. Mais cela semble de votre message que vous avez besoin de la fonctionnalité de 1,7. Donc, peut-être que vous pourriez peut-être écrire une application "Wrapper" compilée contre une ancienne version de Java, avez-vous fait votre chèque, puis chargée et courut votre jar - ou peut-être que vous pourriez peut-être obtenir la même chose en utilisant une sorte de script. P>
Vous pouvez compiler le pot en spécifiant la version plus ancienne. Vérifiez ce lien pour plus de détails. p>
J'ai la même exigence et je l'ai résolu la manière suivante:
avoir une classe "de démarrage" qui n'a absolument aucune dépendance (= importations) à toute nouvelle classe JDK ou à l'une des classes de votre application. Vous homme Quelque chose comme: p> à l'intérieur de cette classe de démarrage, vérifiez la version Java dont vous avez besoin. P> Si le chèque est réussi, chargez votre classe principale à l'aide de la réflexion et commencez sa méthode principale (ou quelle que soit la méthode que vous utilisez). Quelque chose comme ceci: p> à nouveau: Assurez-vous que MyStarter ne contient pas Importations forte> sur votre application ou vos classes non disponibles dans Java 1.2 (ou Quelle que soit la version java que vous ciblerez). p> compiler ensuite Si vous générez un pot exécutable, ajoutez ma cible "compile" dans mon ant puis tout mettre en place un fichier jar. p> p> mystarter code> (et seulement strong> cette classe) avec -Source 1.2 -Target 1.2 Code>
Compilez le reste de vos classes avec le compilateur régulier (par exemple, créer des fichiers Java7 .Class). P> com.foo.mystarter code> comme le < Code> Classe principale: code> attribut. p> build.xml code> ressemble à ceci: p>
Nice - c'est ce que je voulais dire par une application wrapper :)
Envisagez de déployer votre logiciel à l'aide de la technologie Java Web Start. Vous pouvez ensuite spécifier dans le fichier JNLP la version Java exacte prise en charge par votre application.
Spécifiquement la version Java minimale est déclarée dans l'élément J2SE. P>
Par exemple: P>
<?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>
Comme vous l'avez déjà observé, vous ne pouvez exécuter que cela avec 1,7 ou plus. Vous pouvez exécuter un pot compilé pour 1,6 avec 1,7, mais pas l'inverse. Par conséquent, votre chèque est superflu.
Pour plus d'informations sur 1.7 et compatibilité, consultez oracle.com/technetwork/java /javase/compatibility-417013.html