réponse révisée
Hypothèses: version 6.9.1 NetBeans (bien que probablement applicable à la plupart ou toutes les versions 6.x), les systèmes de construction alternatifs (par exemple, Maven) sont pas utilisé ... la default (Ant) est utilisé. Par défaut, NetBeans utilise Ant comme système de construction pour compiler un projet, construire un projet, nettoyer des fichiers construits à partir d'un projet, etc. Ant a deux concepts applicables ici: les cibles et les tâches. Un cible, dans le vocabulaire de Ant, est simplement une «commande» ou une série de tâches qui doivent être complétées pour un travail particulier. Dans NetBeans, les cibles communes sont "Compiler", "Construire", "Nettoyer et construire", etc. Les "tâches" accomplies par une cible sont (entre autres choses) Ant tâches. Dans NetBeans, une tâche (qui est particulièrement pertinente pour répondre à cette question) est la Javac Task. C'est la tâche qu'Ant utilise pour compiler des fichiers .java
en fichiers .class
. Un projet basé sur Ant, et donc un projet NetBeans, utilise le fichier build.xml
pour contrôler le processus de construction et indiquer à Ant comment procéder pour atteindre les cibles. Dans un projet NetBeans, le build.xml
se trouve dans le répertoire racine du projet, par défaut. NetBeans, cependant, utilise un fichier build.xml
extensible par l'utilisateur. Les cibles principales et les tâches définies par NetBeans se trouvent en fait au nbprojects/build-impl.xml
et sont importées dans build.xml
dans les premières lignes du fichier. La théorie est que les utilisateurs peuvent ajouter ou redéfinir des choses dans build.xml
alors que la configuration de base définie par NetBeans reste intacte dans le fichier build-impl.xml
.
Si vous recherchez dans le fichier nbproject/build-impl.xml
par défaut pour un projet Java NetBeans, vous trouverez la tâche Javac mentionnée deux fois. (Recherchez "<javac
".) Les deux sont dans des définitions de macros, et donc dans les complexités de la configuration de construction par défaut de NetBean. Si nous nous référons au Javac Task documentation, nous constatons que les tâches utilisent le compilateur à l'emplacement spécifié par la propriété globale build.compiler
, par l'attribut compiler
spécifié avec la tâche <javac... />
, ou par défaut qui est le compilateur Java utilisé lors de l'exécution et, et donc celui qui est utilisé lors de l'exécution de NetBeans (car c'est ce qui déclenche le processus Ant). Puisque nous ne voyons pas build.compiler
ou l'attribut compiler
n'importe où (dans la valeur par défaut build-impl.xml
), alors nous pouvons seulement conclure que la valeur par défaut est utilisée.
Alors voici la première réponse (plus ou moins correcte). NetBeans compile en utilisant le JDK qui a été utilisé pour exécuter NetBeans par défaut. On dirait que c'est en fait un peu plus compliqué que cette simple réponse, mais c'est essentiellement correct. Si vous regardez la documentation pour la tâche Javac, il fait allusion à "une classe qui implémente l'interface CompilerAdapter", ce qui suggère qu'au lieu d'appeler l'exécutable javac directement, Ant (et donc NetBeans) compile en utilisant la classe du compilateur (cela, selon toute vraisemblance, l'exécutable javac utilise aussi). Reportez-vous au La réponse d'origine ci-dessous permet de déterminer le JDK utilisé pour exécuter NetBeans. Alors, que se passe-t-il si vous ne voulez pas utiliser le JDK par défaut utilisé pour exécuter NetBeans? C'est là que "Java Platforms" entre. Accédez au menu Outils, puis cliquez sur "Plateformes Java". Vous avez probablement seulement une plate-forme définie ici. (En aparté, c'est en fait la réponse la plus correcte à ce que JDK est utilisé par défaut ... celui défini ici dans le Java Platform Manager.) Si vous souhaitez compiler avec une autre version Java (disons que votre JDK par défaut est 1.6 , mais vous voulez compiler contre 1.5) alors vous installez le JDK alternatif quelque part sur votre système, puis configurez une plate-forme ici dans Java Platform Manager de NetBeans. (Je vais le laisser comme un exercice pour vous de trouver la documentation sur la façon d'ajouter une plate-forme Java.Une recherche superficielle du wiki n'a pas révélé quelque chose d'évident.En tout cas, il est assez explicite.)
Une fois qu'une nouvelle plate-forme est créée dans le gestionnaire, vous faites un clic droit sur votre projet dans l'onglet Projets, cliquez sur "Propriétés", puis sur "Bibliothèques". En haut, vous sélectionnez la plate-forme Java appropriée pour le projet. Dès que vous modifiez cette valeur et cliquez sur "OK", NetBeans fait plusieurs ajustements à votre fichier build-impl.xml
qui pointe vers le nouveau JDK avec lequel compiler. (Il est instructif pour les vraiment geek parmi nous de faire une copie du répertoire nbproject
avant de faire cette modification et à diff
que contre le nouveau contenu du répertoire nbproject
après que la modification soit faite.) Les changements indiquent à la tâche Ant de Javac d'utiliser le (équivalent de) l'exécutable javac de la plate-forme spécifiée. Nous avons donc ici la réponse la plus correcte: NetBeans utilise le équivalent de l'exécutable javac (comme invoqué par la tâche Ant javac) qui est spécifié dans plate-forme Java situé sous les bibliothèques du projet nœud des propriétés du projet .
réponse originale
Le chemin du JDK utilisé par NetBeans se trouvent dans le fichier netbeans.conf
. Recherchez l'entrée netbeans_jdkhome
.
Vous pouvez également spécifier le JDKHOME lors de l'exécution (* NIX exemple donné):
netbeans --jdkhome /usr/bin/jdk1.6.0_22
Le fichier netbeans.conf
se trouve dans des endroits différents en fonction de ce système d'exploitation que vous utilisez. Voir le NetBeans.conf FAQ sur le wiki NetBeans pour l'aide pour trouver le fichier.
Quelques commentaires supplémentaires ...
... Vous pouvez spécifier l'option -target dans les propriétés du projet. Dans NetBeans 6.9, cliquez avec le bouton droit sur le projet et choisissez Propriétés. Cliquez sur le nœud Compilation. Ajoutez votre -target à Autres options du compilateur.
... J'ai lu à quelques endroits que spécifier une cible n'est pas une garantie que le code fonctionnera sur un JRE dont la version est inférieure au JDK qui l'a construit. En d'autres termes, la recommandation semble être que si vous voulez 1.5 binaires, alors compilez avec le 1.5 JDK.
Coutures Netbeans ** pas ** pour utiliser un exécutable de 'javac' du tout! Il semble le faire à partir de certains appels d'API, je suppose. –
Essayez d'ajouter temporairement '-version' dans Project/Properties/Build-Compiling /" Options supplémentaires du compilateur "et de voir quelle version est imprimée pendant clean + build. –
Merci pour la suggestion. Donc suite à votre conseil, j'ai maintenant essayé d'ajouter -version, mais je n'ai vu aucune sortie pour cela. Donc j'ai essayé d'ajouter -not-real-opt dans l'espoir de casser la compiliation, mais ça a juste continué avec les mêmes problèmes – Felix