web-dev-qa-db-fra.com

ajout de classpath dans linux

export CLASSPATH=.;../somejar.jar;../mysql-connector-Java-5.1.6-bin.jar
Java -Xmx500m folder.subfolder../dit1/some.xml
cd ..

est la déclaration ci-dessus pour définir le chemin de classe sur le chemin de classe déjà existant dans linux est correcte ou non

12
xyz

Je n'aime pas définir CLASSPATH. CLASSPATH est une variable globale et en tant que telle, elle est mauvaise:

  • Si vous le modifiez dans un script, soudainement certains programmes Java cesseront de fonctionner.
  • Si vous y mettez les bibliothèques pour toutes les choses que vous exécutez, et cela devient encombré.
  • Vous obtenez des conflits si deux applications différentes utilisent des versions différentes de la même bibliothèque.
  • Il n'y a pas de gain de performances car les bibliothèques du CLASSPATH ne sont pas partagées - juste leur nom est partagé.
  • Si vous mettez le point (.) Ou tout autre chemin relatif dans le CLASSPATH, cela signifie une chose différente à chaque endroit - cela causera certainement de la confusion.

Par conséquent, la méthode préférée consiste à définir le chemin de classe pour chaque exécution du jvm, par exemple:

Java -Xmx500m -cp ".:../somejar.jar:../mysql-connector-Java-5.1.6-bin.jar"    "folder.subfolder../dit1/some.xml

S'il devient long, la procédure standard consiste à l'envelopper dans un script bash ou batch pour enregistrer la saisie.

24
flybywire

Il est toujours conseillé de ne jamais détruire de manière destructive un chemin de classe existant, sauf si vous avez une bonne raison.

La ligne suivante conserve le chemin de classe existant et y ajoute.

export CLASSPATH="$CLASSPATH:foo.jar:../bar.jar"
16
Yann Ramin

La différence importante entre la définition de Classpath dans Windows et Linux est le séparateur de chemin qui est ";" (point-virgule) sous Windows et ":" (deux-points) sous Linux. Aussi %PATH% est utilisé pour représenter la valeur de la variable de chemin existante dans Windows tandis que ${PATH} est utilisé dans le même but sous Linux (dans le shell bash). Voici la façon de configurer le chemin de classe sous Linux:

export CLASSPATH=${CLASSPATH}:/new/path

mais en tant que tel, Classpath est très délicat et vous pouvez vous demander pourquoi votre programme ne fonctionne pas même après avoir défini le Classpath correct. A noter:

  1. -cp les options remplacent la variable d'environnement CLASSPATH.
  2. Le chemin de classe défini dans le fichier manifeste remplace à la fois -cp et CLASSPATH variable d'environnement.

Référence: Comment fonctionne Classpath en Java .

11
Chui

Les chemins sous linux sont séparés par des deux-points (:), pas les points-virgules (;), comme le théâtre l'a correctement utilisé dans son exemple. Je crois que Java respecte cette convention.

Éditer

Alternativement à ce que et Andy a suggéré , vous pouvez utiliser le formulaire suivant (qui définit CLASSPATH pour la durée de la commande):

CLASSPATH=".:../somejar.jar:../mysql-connector-Java-5.1.6-bin.jar" Java -Xmx500m ...

celui qui vous convient le mieux.

6
David Hanak