Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[La question con du jour][Zoologie] Tout mettre dans le JAR !

6 réponses
Avatar
Cram TeXeD
Bonjour les gens.

Alors voilà :
D'un côté plein de jolis fichiers java bien compilés comme il faut
dans un ensemble de hiérarchie org/montruc/enplume/plumedezoizo
De l'autre toutes les zoiles p'tites librairies (en .jar, c'est mardi
gras) nécessaires à l'exécution du bazar dans le répertoire lib.
Objectif : lune, euh non, mes collègues !
A force de leur sussurer à l'oreille "viens voir ma merveille" (rien
se s*xuel !), ils veulent la voir (non rien de ...).

D'où l'idée génial de mettre tout cela dans un JAR, que nous
appelerons monjar.JAR et de leur dire
" - Hé Joe, fait 'java -jar mon.jar org.montruc.enplume.MainEtLoir' !"

Bien sur, bien sur, je vous vois arriver avec vos RTFM !!!!
Que celui qui n'a jamais essayé me jette la première classe !

Le MANIFEST.
Oui oui oui pas de pb, je l'ai et il est beau

Manifest-Version: 1.0
Main-Class: org.apache.commons.jelly.Jelly
Class-Path: lib/velocity-1.4-dev.jar
lib/commons-collections-2.0.jar
lib/commons-logging-1.0.jar
lib/commons-messenger-1.0-dev-3.jar
lib/dom4j-1.4-dev-7.jar
lib/forehead-1.0-beta-2.jar
lib/hsqldb-1.7.0.jar
lib/isorelax-20020414.jar
lib/javadoc-1.3.jar
lib/junit-3.7.jar
lib/msv-20020414.jar
lib/nekohtml-0.6.5.jar
lib/ojb-0.8.375.jar
lib/commons-beanutils-1.4-dev.jar
lib/werkz-1.0-beta-2.jar
lib/xerces-2.0.0.jar
lib/xml-apis-2.0.2.jar
lib/javax.jms.jar
lib/jms.jar
lib/commons-digester-SNAPSHOT.jar
lib/commons-httpclient-2.0-dev.jar
lib/commons-jexl-1.0-beta-1.jar
lib/bsh-1.2-b3.jar
lib/antlrall-2.7.1.jar
lib/ant-optional-1.5.jar
lib/bsf-2.2.jar
lib/ant-1.5.jar
lib/commons-grant-1.0-beta-4.jar
lib/commons-discovery-SNAPSHOT.jar


Mais ca ne marche pas :/

Le premier appel à une librairie plante lamentablement :
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogFactory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)

Alors que je précise que ca marche trés bien avec un
java -cp ${les librairies qui vont bien}
org.apache.commons.jelly.Jelly

Aors aurais-je carressé un rêve fou ?

Merci d'avance.

8:0) Cram TeXeD
- Le père Noel existe, et elle est noire -
--
"La réalité, c'est ce qui refuse de disparaître
quand on a cessé d'y croire." (Philip K.Dick)
<http://texed75.free.fr>

6 réponses

Avatar
Damien Lecan
D'un côté plein de jolis fichiers java bien compilés comme il faut
dans un ensemble de hiérarchie org/montruc/enplume/plumedezoizo
De l'autre toutes les zoiles p'tites librairies (en .jar, c'est mardi
gras) nécessaires à l'exécution du bazar dans le répertoire lib.
Objectif : lune, euh non, mes collègues !
A force de leur sussurer à l'oreille "viens voir ma merveille" (rien
se s*xuel !), ils veulent la voir (non rien de ...).

D'où l'idée génial de mettre tout cela dans un JAR, que nous
appelerons monjar.JAR et de leur dire
" - Hé Joe, fait 'java -jar mon.jar org.montruc.enplume.MainEtLoir' !"
Dans le tutorial java

http://java.sun.com/docs/books/tutorial/jar/basics/manifest.html
"The URLs in the Class-Path header are given relative to the URL of the
JAR file of the applet or application."

Supprime les lib/ dans ton classpath ...


Damien

Avatar
Cram TeXeD
aux environs de Fri, 19 Dec 2003 09:15:22 +0100, Damien Lecan frappa :

Supprime les lib/ dans ton classpath ...


A marche pas...
--------------------
C:temp>java -jar jelly-dsi.jar org.apache.commons.jelly.Jelly
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogF
actory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)

C:temp>java -jar jelly-dsi.jar
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogF
actory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)

C:temp>java -cp jelly-dsi.jar org.apache.commons.jelly.Jelly
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogF
actory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)
--------------------



Le manifest
----------------------------------
Manifest-Version: 1.0
Main-Class: org.apache.commons.jelly.Jelly
Class-Path: velocity-1.4-dev.jar
commons-collections-2.0.jar
commons-logging-1.0.jar
commons-messenger-1.0-dev-3.jar
dom4j-1.4-dev-7.jar
forehead-1.0-beta-2.jar
hsqldb-1.7.0.jar
isorelax-20020414.jar
javadoc-1.3.jar
junit-3.7.jar
msv-20020414.jar
nekohtml-0.6.5.jar
ojb-0.8.375.jar
commons-beanutils-1.4-dev.jar
werkz-1.0-beta-2.jar
xerces-2.0.0.jar
xml-apis-2.0.2.jar
javax.jms.jar
jms.jar
commons-digester-SNAPSHOT.jar
commons-httpclient-2.0-dev.jar
commons-jexl-1.0-beta-1.jar
bsh-1.2-b3.jar
antlrall-2.7.1.jar
ant-optional-1.5.jar
bsf-2.2.jar
ant-1.5.jar
commons-grant-1.0-beta-4.jar
commons-discovery-SNAPSHOT.jar

8:0/ Cram TeXeD
--
"La réalité, c'est ce qui refuse de disparaître
quand on a cessé d'y croire." (Philip K.Dick)
<http://texed75.free.fr>

Avatar
cilovie
Si j'ai bien tout compris, les liens ci-dessous vont t'aider :
http://maven.apache.org/reference/plugins/uberjar/
http://classworlds.codehaus.org/

"Cram TeXeD" a écrit dans le
message de news:
Bonjour les gens.

Alors voilà :
D'un côté plein de jolis fichiers java bien compilés comme il faut
dans un ensemble de hiérarchie org/montruc/enplume/plumedezoizo
De l'autre toutes les zoiles p'tites librairies (en .jar, c'est mardi
gras) nécessaires à l'exécution du bazar dans le répertoire lib.
Objectif : lune, euh non, mes collègues !
A force de leur sussurer à l'oreille "viens voir ma merveille" (rien
se s*xuel !), ils veulent la voir (non rien de ...).

D'où l'idée génial de mettre tout cela dans un JAR, que nous
appelerons monjar.JAR et de leur dire
" - Hé Joe, fait 'java -jar mon.jar org.montruc.enplume.MainEtLoir' !"

Bien sur, bien sur, je vous vois arriver avec vos RTFM !!!!
Que celui qui n'a jamais essayé me jette la première classe !

Le MANIFEST.
Oui oui oui pas de pb, je l'ai et il est beau

Manifest-Version: 1.0
Main-Class: org.apache.commons.jelly.Jelly
Class-Path: lib/velocity-1.4-dev.jar
lib/commons-collections-2.0.jar
lib/commons-logging-1.0.jar
lib/commons-messenger-1.0-dev-3.jar
lib/dom4j-1.4-dev-7.jar
lib/forehead-1.0-beta-2.jar
lib/hsqldb-1.7.0.jar
lib/isorelax-20020414.jar
lib/javadoc-1.3.jar
lib/junit-3.7.jar
lib/msv-20020414.jar
lib/nekohtml-0.6.5.jar
lib/ojb-0.8.375.jar
lib/commons-beanutils-1.4-dev.jar
lib/werkz-1.0-beta-2.jar
lib/xerces-2.0.0.jar
lib/xml-apis-2.0.2.jar
lib/javax.jms.jar
lib/jms.jar
lib/commons-digester-SNAPSHOT.jar
lib/commons-httpclient-2.0-dev.jar
lib/commons-jexl-1.0-beta-1.jar
lib/bsh-1.2-b3.jar
lib/antlrall-2.7.1.jar
lib/ant-optional-1.5.jar
lib/bsf-2.2.jar
lib/ant-1.5.jar
lib/commons-grant-1.0-beta-4.jar
lib/commons-discovery-SNAPSHOT.jar


Mais ca ne marche pas :/

Le premier appel à une librairie plante lamentablement :
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogFactory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)

Alors que je précise que ca marche trés bien avec un
java -cp ${les librairies qui vont bien}
org.apache.commons.jelly.Jelly

Aors aurais-je carressé un rêve fou ?

Merci d'avance.

8:0) Cram TeXeD
- Le père Noel existe, et elle est noire -
--
"La réalité, c'est ce qui refuse de disparaître
quand on a cessé d'y croire." (Philip K.Dick)
<http://texed75.free.fr>


Avatar
Segurane
Cram TeXeD wrote:
aux environs de Fri, 19 Dec 2003 09:15:22 +0100, Damien Lecan frappa :

Supprime les lib/ dans ton classpath ...


A marche pas...
--------------------
C:temp>java -jar jelly-dsi.jar org.apache.commons.jelly.Jelly
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogF
actory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)

C:temp>java -jar jelly-dsi.jar
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogF
actory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)

C:temp>java -cp jelly-dsi.jar org.apache.commons.jelly.Jelly
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/logging/LogF
actory
at org.apache.commons.jelly.Jelly.<clinit>(Jelly.java:88)
--------------------



Le manifest
----------------------------------
Manifest-Version: 1.0
Main-Class: org.apache.commons.jelly.Jelly
Class-Path: velocity-1.4-dev.jar
commons-collections-2.0.jar
commons-logging-1.0.jar
commons-messenger-1.0-dev-3.jar
dom4j-1.4-dev-7.jar
forehead-1.0-beta-2.jar
hsqldb-1.7.0.jar
isorelax-20020414.jar
javadoc-1.3.jar
junit-3.7.jar
msv-20020414.jar
nekohtml-0.6.5.jar
ojb-0.8.375.jar
commons-beanutils-1.4-dev.jar
werkz-1.0-beta-2.jar
xerces-2.0.0.jar
xml-apis-2.0.2.jar
javax.jms.jar
jms.jar
commons-digester-SNAPSHOT.jar
commons-httpclient-2.0-dev.jar
commons-jexl-1.0-beta-1.jar
bsh-1.2-b3.jar
antlrall-2.7.1.jar
ant-optional-1.5.jar
bsf-2.2.jar
ant-1.5.jar
commons-grant-1.0-beta-4.jar
commons-discovery-SNAPSHOT.jar


Comme le sous-entend plus haut Damien Lecan, le probleme vient peut etre
d'une incoherence entre l'arborescence de ton application et ton fichier
manifest.
Tu dois sans doute savoir mais ca va mieux en le repetant, que les
bibliotheques doivent etre situées à l'endroit specifiée dans la balise
Class-path. Si tu as 'Class-path : uneLib.jar' dans le manifest, alors
uneLib.jar sera à la racine.
Deuxieme remarque, tu ne dois pas lancer ton appli avec
$ java -jar mon.jar org.montruc.enplume.MainEtLoir
, mais tout simplement avec
$ java -jar mon.jar
, le point d'entrée de l'application etant specifié par la ligne Main-class
: monPack1.monSousPack1.maClasseMain.

En esperant avoir helpé,

--
Nico.


Avatar
Cram TeXeD
On Fri, 19 Dec 2003 23:42:28 +0100, < Segurane > dit :

En esperant avoir helpé,


Ben merci qd même, mais j'avais lu le même doc et c'était la version
du premier manifeste.
En fait le projet est mal fait (test et récup des librairies une à
une)
Il est comme ceci
RACINE/org.apache.commons.jelly/*.class
RACINE/lib/*.lib

d'où le premier manifest :
Manifest-Version: 1.0
Main-Class: org.apache.commons.jelly.Jelly
Class-Path: lib/velocity-1.4-dev.jar
lib/commons-collections-2.0.jar
lib/commons-logging-1.0.jar
...

Cram TeXeD
--
"On ne peut pas ne pas communiquer"
axiome n°1 de Paul Watzlawick
<http://texed75.free.fr>

Avatar
Segurane
Cram TeXeD wrote:
On Fri, 19 Dec 2003 23:42:28 +0100, < Segurane > dit :

En esperant avoir helpé,


Ben merci qd même, mais j'avais lu le même doc et c'était la version
du premier manifeste.
En fait le projet est mal fait (test et récup des librairies une à
une)
Il est comme ceci
RACINE/org.apache.commons.jelly/*.class
RACINE/lib/*.lib

d'où le premier manifest :
Manifest-Version: 1.0
Main-Class: org.apache.commons.jelly.Jelly
Class-Path: lib/velocity-1.4-dev.jar
lib/commons-collections-2.0.jar
lib/commons-logging-1.0.jar


Ach je viens de comprendre ce que tu souhaites faire. Pour autant que je
sache ce n'est pas possible en "standard", regardes donc du coté des liens
fournis par cilovie.
Par contre je ne vois pas ce que tu veux dire par le projet est mal fait, il
semble bien structuré ce projet :)

--
Signature ennuyeuse