web-dev-qa-db-fra.com

bootstrap chemin de classe non défini

Je reçois donc- warning: [options] bootstrap class path not set in conjunction with -source 1.6

Et je suis sur le point de poser 3 questions à ce sujet. Je comprends que je dois définir le chemin de classe bootstrap mais je ne suis pas sûr de comprendre comment. Un rapide google vient de m'envoyer vers des pages citées à partir de la page Oracle, mais j'ai lu la page Oracle et ne sentais pas que je le comprenais particulièrement bien.

J'utilise actuellement ce code sur Netbeans, donc tout ce que j'ai à faire est d'appuyer sur le bouton de lecture pour qu'il se compile et s'exécute. Existe-t-il une propriété qui dicte comment cela se compilera afin que je puisse ajouter dans le chemin de classe bootstrap?

En outre, pour l'éventualité à venir que je l'enlèverai en cours d'exécution uniquement sur Netbeans et l'exécuter à partir de la ligne de commande, quelle est la bonne façon de compiler avec le chemin de classe bootstrap là-bas? Ils disent $ javac -source 6 HelloWorld.Java Mais dire simplement -source 1.6 Serait-il vraiment la solution?

Peut-être une question encore plus importante, comment puis-je éviter ce type d'avertissement à l'avenir? Si je comprends encore un peu, je fais référence à une ancienne source Java et donc à des méthodes plus anciennes. Je ne sais pas comment ni quand cela s'est produit.

27
Stephopolis

Vous effectuez une compilation croisée. Vous utilisez un compilateur JDK 7 pour compiler des classes pour JDK 6. C'est correct mais pour éviter les problèmes, le compilateur veut mettre la main sur JDK 6 rt.jar. Le raisonnement derrière cela est que vous pouvez réellement générer des classes qui ne fonctionnent pas avec JDK 6 car vous utilisez peut-être les anciennes règles de langage (dans ce cas 1.6) mais les toutes nouvelles classes bootstrap). Certaines méthodes peuvent ne pas être présentes dans l'ancien JDK par exemple. Ainsi, vous obtenez votre compilation, mais une fois que vous exécutez le programme, elle peut exploser avec un MethodNotFoundException.

Quelques solutions, vous pouvez en choisir une

  • Spécifiez rt.jar de JDK 6. Pourquoi ne pas utiliser l'ancien compilateur que même?
  • Utilisez le compilateur JDK 6 (il a rt.jar inclus). Pourquoi même utiliser 7 si aucune fonction 7 n'est nécessaire.
  • Ignorez l'avertissement et bénéficiez d'une bonne couverture de test pour vous assurer que vous n'utilisez pas Java 7 fonctionnalités
    • Je ne connais pas NetBeans mais dans Eclipse, vous pouvez également dire que vous compilez avec JDK 6, donc il ne sera pas réellement compilé si vous utilisez Java 7 fonctionnalités.
  • Modifiez les besoins de l'entreprise et compilez pour Java 7.
41
toomasr

Je comprends que je dois définir le chemin de classe bootstrap mais je ne suis pas sûr de comprendre comment.

Dans Netbeans 8.0.2, accédez à:

Run > Set Project Configuration > Customise...

Dans la fenêtre Catégories, accédez à:

Build > Compiling

Le champ inférieur est "Options supplémentaires du compilateur" auquel vous pouvez ajouter:

-bootclasspath /your/path/to/lower/Java/version/lib/rt.jar
1
MT0

Avait le même avertissement de compilation sur la console sur macOS. Ici, l'option de compilation à ajouter est

-bootclasspath /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar

Notez que sur macOS, pour Java versions <= 1.6 (celles publiées par Apple), le rt.jar est appelé classes.jar

1
nhaggen

Cliquez simplement avec le bouton droit sur les propriétés du projet, puis accédez à Binding et choisissez le JDK 1.7 à condition que vous utilisiez ses fonctionnalités dans votre projet NetBeans et c'est la raison pour laquelle vous rencontrez le problème. Cela aidera à résoudre le problème et a fonctionné pour moi.

1
user1818827