OVH Cloud OVH Cloud

Jar vs Jar

4 réponses
Avatar
Jean-Philippe Martin
Bonjour,

j'ai un petit probleme de compréhension avec les jar et les classpath :o(

Prenons l'exemple d'un fichier ClassA.jar contenant une et une seule classe
A.class (possédant une méthode printCoucou();)

Si nous faisons une classe B avec une fonction main qui crée une instance de
A et qui lui demande juste de faire printCoucou(). Et bien nous pouvons le
réaliser on placant dans le classpath à l'execution de javac et de java le
path du jar ClassA.jar. L'execution de B.class affichera le contenu de
printCoucou() sans probleme.

Si maintenant nous decidons de placer la classe B dans un Jar et bien je ne
parviens pas a trouver les parametre pour executer java -jar ClassB.jar et
avoir le meme resultat que quand ClassB était juste une classe :o(

Ca me parait guère plus compliqué pour le compilateur :o' Une solution pour
moi ?

Merci d'avoir lu et d'avance pour vos réponses.

Jean-Philippe.

4 réponses

Avatar
Black Myst
Jean-Philippe Martin wrote:
Bonjour,

j'ai un petit probleme de compréhension avec les jar et les classpath :o(

Prenons l'exemple d'un fichier ClassA.jar contenant une et une seule classe
A.class (possédant une méthode printCoucou();)

Si nous faisons une classe B avec une fonction main qui crée une instance de
A et qui lui demande juste de faire printCoucou(). Et bien nous pouvons le
réaliser on placant dans le classpath à l'execution de javac et de java le
path du jar ClassA.jar. L'execution de B.class affichera le contenu de
printCoucou() sans probleme.

Si maintenant nous decidons de placer la classe B dans un Jar et bien je ne
parviens pas a trouver les parametre pour executer java -jar ClassB.jar et
avoir le meme resultat que quand ClassB était juste une classe :o(

Ca me parait guère plus compliqué pour le compilateur :o' Une solution pour
moi ?

Merci d'avoir lu et d'avance pour vos réponses.

Jean-Philippe.




java -cp classA.jar:classB.jar B

Avatar
Jean-Philippe Martin
"Black Myst" <black-point-myst-chez-free-point-fr> a écrit dans le message
de news:41167dc2$0$4351$
Jean-Philippe Martin wrote:
Bonjour,

j'ai un petit probleme de compréhension avec les jar et les classpath
:o(



Prenons l'exemple d'un fichier ClassA.jar contenant une et une seule
classe


A.class (possédant une méthode printCoucou();)

Si nous faisons une classe B avec une fonction main qui crée une
instance de


A et qui lui demande juste de faire printCoucou(). Et bien nous pouvons
le


réaliser on placant dans le classpath à l'execution de javac et de java
le


path du jar ClassA.jar. L'execution de B.class affichera le contenu de
printCoucou() sans probleme.

Si maintenant nous decidons de placer la classe B dans un Jar et bien je
ne


parviens pas a trouver les parametre pour executer java -jar ClassB.jar
et


avoir le meme resultat que quand ClassB était juste une classe :o(

Ca me parait guère plus compliqué pour le compilateur :o' Une solution
pour


moi ?

Merci d'avoir lu et d'avance pour vos réponses.

Jean-Philippe.




java -cp classA.jar:classB.jar B


:os

Exception in thread "main" java.lang.NoClassDefFoundError: ClassB

où ClassB est la classe B décrite dans mon exemple :os

Merci de m'aider quand même.

Le manifest du Jar est le suivant:

Manifest-Version: 1.0
Main-Class: ClassB -->Explique quel classe lancer dans
le Jar (même nom de classe à lancer que le nom du jar)
Class-Path: e:LLNClassA.jar --> repertoire où se trouve l'autre jar
qu'on souhaite inclure.

Je lance donc comme vous me l'avez dit:

java -cp "e:LLNClassA.jar;ClassB.jar" -jar ClassB.jar

en sachant que je tourne sous Windows.


Avatar
Jean-Philippe Martin
"Jean-Philippe Martin" a écrit dans le
message de news:4116882e$0$309$

"Black Myst" <black-point-myst-chez-free-point-fr> a écrit dans le message
de news:41167dc2$0$4351$
Jean-Philippe Martin wrote:
Bonjour,

j'ai un petit probleme de compréhension avec les jar et les classpath
:o(



Prenons l'exemple d'un fichier ClassA.jar contenant une et une seule
classe


A.class (possédant une méthode printCoucou();)

Si nous faisons une classe B avec une fonction main qui crée une
instance de


A et qui lui demande juste de faire printCoucou(). Et bien nous
pouvons



le
réaliser on placant dans le classpath à l'execution de javac et de
java



le
path du jar ClassA.jar. L'execution de B.class affichera le contenu de
printCoucou() sans probleme.

Si maintenant nous decidons de placer la classe B dans un Jar et bien
je



ne
parviens pas a trouver les parametre pour executer java -jar
ClassB.jar



et
avoir le meme resultat que quand ClassB était juste une classe :o(

Ca me parait guère plus compliqué pour le compilateur :o' Une solution
pour


moi ?

Merci d'avoir lu et d'avance pour vos réponses.

Jean-Philippe.




java -cp classA.jar:classB.jar B


:os

Exception in thread "main" java.lang.NoClassDefFoundError: ClassB

où ClassB est la classe B décrite dans mon exemple :os

Merci de m'aider quand même.

Le manifest du Jar est le suivant:

Manifest-Version: 1.0
Main-Class: ClassB -->Explique quel classe lancer dans
le Jar (même nom de classe à lancer que le nom du jar)
Class-Path: e:LLNClassA.jar --> repertoire où se trouve l'autre jar
qu'on souhaite inclure.

Je lance donc comme vous me l'avez dit:

java -cp "e:LLNClassA.jar;ClassB.jar" -jar ClassB.jar

en sachant que je tourne sous Windows.





J'ai résolu le probleme en ne definissant pas d'office une classe a lancer
par défaut dans le Jar.

Y a t il moyen d'utiliser une classe par défaut tout de même ?



Avatar
Francois Cartegnie
Jean-Philippe Martin wrote:


J'ai résolu le probleme en ne definissant pas d'office une classe a lancer
par défaut dans le Jar.

Y a t il moyen d'utiliser une classe par défaut tout de même ?


Une classe par défaut, pointée par le manifest.
Cette classe se chargera de chercher le nom de la classe ClasseB,
ClasseA, etc, ... (dans un rep du jar par ex) et l'instanciera avec le
ClassLoader