2012-02-17 7 views
8

J'essaie de comprendre le fonctionnement de classpath. Après une recherche sur le web c'est là où je suis arrivé à ce jour:Java classpath - Linux

J'ai ajouté

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

à /etc/environment. Je cours Ubuntu en passant.

Java trouve le chemin et compile sans problème.

Le problème est que si je change le CLASSPATH et que je fais: source /etc/environment, le nouveau CLASSPATH n'est pas appliqué. Il est appliqué si et seulement si je redémarre le système. Par exemple, si je supprime le

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

ligne, alors je fais la source/etc/environnement et je fais enfin echo $CLASSPATH, ce que je reçois est /home/foo:/home/foo/Java_code/my_code. Je pense que je devrais avoir une ligne vide, n'est-ce pas?

Existe-t-il un moyen d'appliquer immédiatement les modifications dans les variables PATH ou CLASSPATH sans avoir à redémarrer le système?

Il peut vous aider à savoir que le fichier/etc/environnement à l'origine ne contenait que la ligne suivante:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" 

Merci pour votre temps.

+0

Comment supprimez-vous le classpath? –

+0

pourquoi faites-vous tout cela, quel est votre environnement?/etc/environment est utilisé pour définir les variables d'environnement pour les applications graphiques. Si vous avez des graphiques, vous pouvez utiliser IDE. Pourquoi aller à tous ces problèmes avec l'inclusion de votre dossier de départ + projets dans classpath? – hovanessyan

+0

J'essaie simplement de définir CLASSPATH de façon permanente afin d'importer des paquets de dossiers spécifiques sans avoir à le définir chaque fois que je lance javac. – tomatoeggs

Répondre

5

Je pense que vous ne devriez pas placer de chemins locaux dans votre répertoire personnel dans un fichier système. Je laisserais /etc/environment bien seul, sauf si vous fournissez quelques changements, qui sont nécessaires ou bénéfiques pour tous les utilisateurs. Mettez les modifications apportées au CLASSPATH dans votre .bashrc dans votre répertoire personnel. De cette façon, vous pouvez l'alimenter et tout nouveau bash démarré aura les paramètres corrects à la fois.

+1

Cela a très bien fonctionné. Maintenant, tout semble être lisse. Merci de votre aide. – tomatoeggs

2

Lorsque vous supprimez la ligne

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

et source ... ne supprimerait pas le CLASSPATH parce qu'il a déjà été défini. Il n'efface pas les variables qui ont déjà été définies.

+0

Donc, le seul moyen est de redémarrer mon système pour que le nouveau CLASSPATH soit appliqué? – tomatoeggs

+0

Vous pouvez placer le 'export CLASSPATH ="/home/toto:/home/foo/Java_code/my_code " " dans votre fichier '.bashrc' dans votre' '' directoy pour définir les variables chaque fois que vous vous connectez. Pour annuler la variable CLASSPATH, faites 'unset CLASSPATH' –

+0

Merci Sapan. Vos commentaires m'ont vraiment aidé. Tout est lisse maintenant. – tomatoeggs

1

Le fichier /etc/environment n'est pas un script shell normal; il n'est pas exécuté en tant que script shell lorsque vous démarrez ou que vous vous connectez à votre système. Donc, l'exécuter avec source /etc/environment ne fonctionne pas comme lorsque vous démarrez normalement votre système.

Voir: Ubuntu environment variables

/etc/environment - Ce fichier est spécifiquement conçu pour les paramètres des variables d'environnement à l'échelle du système. Ce n'est pas un fichier de script, mais plutôt des expressions d'affectation, une par ligne. Plus précisément, ce fichier stocke les paramètres régionaux et de chemin du système.

+0

Merci Jesper. Vos informations sont vraiment précieuses. – tomatoeggs

4
export CLASSPATH="" 

ou mieux

unset CLASSPATH 

supprimera une Classpath existante. Il existe plusieurs emplacements où vous pouvez définir ou désactiver le chemin de classe - une entrée manquante ne le supprimera pas.