Probleme Eclipse et gestion des Jars

Le
Kub
Bonjour,

Aprs moults recherches infructeuses, je me dcide poster ici mon
problme. Certes, pas prcisment li au langage Java mais un peu
d'aide serait grandement apprcie.
Sous Eclipse (3.2) j'ai dvelopp un certain nombre de classes
ventiles dans des jars lesquels sont crs par le menu contextuel
Export des projets.
Quand je teste mes classes depuis Eclipse tout fonctionne correctement.
En revanche lorsque ces jar sont utiliss dans d'autres projets sur un
autre environnement Eclipse a part en sucette.
Exemple avec le code suivant qui a un comportement trange :

// Localisation du fichier xsd adequat
URL ficDTDURL = this.getClass().getResource(NOM_FIC_XSD);
File schemaLocation = new File(ficDTDURL.getFile());
// puis on construit un nouveau schema de validation
schema = factory.newSchema(schemaLocation);

La dernire instruction gnre l'xception suivante :
org.xml.sax.SAXParseException: schema_reference.4: Failed to read
schema document
'file:///D:/eclipse/file:/C:/JAR/B2B/Java/lib/Etudes/gco.b2b.xml.jar!/gco/b=
2b/xml/FicCde.xsd',
because
1) could not find the document;
2) the document could not be read;
3) the root element of the document is not <xsd:schema>.


La derniere instruction semble ajouter le path D:/eclipse/file au
chemin d'accs du jar sans qu'on sache pourquoi alors que
'schemaLocation' pointe sur le bon chemin
(C:/JAR/B2B/Java/lib/Etudes/gco.b2b.xml.jar!/gco/b2b/xml/FicCde.xsd).
J'ai tent de rsoudre le problme en faisant : schema =
factory.newSchema(schemaLocation.getAbsolutePath()) et schema =
factory.newSchema(schemaLocation.getCanonicalPath()) mais a ne change
rien.

L'environnement Eclipse sur lequel a ne marche pas a pourtant
exactement les mmes buildpath (mis jour dans les proprits du
projet depuis Eclipse) que le mien.
Ce probleme que je n'arrive pas rsoudre semble faire parti d'un
ensemble d'autres problmes que j'ai rencontrs lors de l'appel de
classes contenues dans les jars (NoClassDefFound,
'this.getClass().getResource(NOM_FIC)' qui renvoit un null etc.),
appels qui fonctionnent parfaitement sur l'environnement dans lequel
les classes ont t dveloppes mais qui posent soucis ailleurs.

Une ide pour rsoudre mon problme ?
Merci d'avance.
K
Vos réponses
Trier par : date / pertinence
TestMan
Le #222730
Bonjour,

Après moults recherches infructeuses, je me décide à poster ici mon
problème. Certes, pas précisément lié au langage Java mais un peu
d'aide serait grandement appréciée.
Sous Eclipse (3.2) j'ai développé un certain nombre de classes
ventilées dans des jars lesquels sont créés par le menu contextuel
Export des projets.
Quand je teste mes classes depuis Eclipse tout fonctionne correctement.
En revanche lorsque ces jar sont utilisés dans d'autres projets sur un
autre environnement Eclipse ça part en sucette.
Exemple avec le code suivant qui a un comportement étrange :

// Localisation du fichier xsd adequat...
URL ficDTDURL = this.getClass().getResource(NOM_FIC_XSD);
File schemaLocation = new File(ficDTDURL.getFile());
// ... puis on construit un nouveau schema de validation
schema = factory.newSchema(schemaLocation);

La dernière instruction génère l'éxception suivante :
org.xml.sax.SAXParseException: schema_reference.4: Failed to read
schema document
'file:///D:/eclipse/file:/C:/JAR/B2B/Java/lib/Etudes/gco.b2b.xml.jar!/gco/b2b/xml/FicCde.xsd',
because
1) could not find the document;
2) the document could not be read;
3) the root element of the document is not <xsd:schema>.


La derniere instruction semble ajouter le path D:/eclipse/file au
chemin d'accès du jar sans qu'on sache pourquoi alors que
'schemaLocation' pointe sur le bon chemin
(C:/JAR/B2B/Java/lib/Etudes/gco.b2b.xml.jar!/gco/b2b/xml/FicCde.xsd).
J'ai tenté de résoudre le problème en faisant : schema > factory.newSchema(schemaLocation.getAbsolutePath()) et schema > factory.newSchema(schemaLocation.getCanonicalPath()) mais ça ne change
rien.

L'environnement Eclipse sur lequel ça ne marche pas a pourtant
exactement les mêmes buildpath (mis à jour dans les propriétés du
projet depuis Eclipse) que le mien.
Ce probleme que je n'arrive pas à résoudre semble faire parti d'un
ensemble d'autres problèmes que j'ai rencontrés lors de l'appel de
classes contenues dans les jars (NoClassDefFound,
'this.getClass().getResource(NOM_FIC)' qui renvoit un null etc.),
appels qui fonctionnent parfaitement sur l'environnement dans lequel
les classes ont été développées mais qui posent soucis ailleurs.

Une idée pour résoudre mon problème ?
Merci d'avance.
K

Bonsoir,


Testez directement :

final String SCHEMA = "FicCde.xsd";
URL schemaLocation = this.getClass().getResource(SCHEMA);
schema = factory.newSchema(schemaLocation);

Assurez vous que le fichier .xsd soit bien déployé dans le même paquet
(=répertoire du JAR) que la classe correspondant au this.

A+
TM

Kub
Le #222729

Bonsoir,

Testez directement :

final String SCHEMA = "FicCde.xsd";
URL schemaLocation = this.getClass().getResource(SCHEMA);
schema = factory.newSchema(schemaLocation);

Assurez vous que le fichier .xsd soit bien déployé dans le même paq uet
(=répertoire du JAR) que la classe correspondant au this.

A+
TM


Merci pour la solution !!! Elle fonctionne. Il m'a suffit de supprimer
la ligne :
File schemaLocation = new File(ficDTDURL.getFile());

K.

Aurélien
Le #222696
Bon, je n'ai pas d'actions chez eux parce que c'est open source et que je n'ai
pas de sous mais je découvre ces derniers temps Maven 2
(http://maven.apache.org/) et c'est le bonheur, plus de souci de dépendances et
de gestion des jars.
Bref je vous le conseille fortement.
Et bien sûr il existe un plugin pour eclipse (lien sur la page indiquée).

Aurélien Barbier-Accary.
TestMan
Le #222694
Bon, je n'ai pas d'actions chez eux parce que c'est open source et que
je n'ai pas de sous mais je découvre ces derniers temps Maven 2
(http://maven.apache.org/) et c'est le bonheur, plus de souci de
dépendances et de gestion des jars.
Bref je vous le conseille fortement.
Et bien sûr il existe un plugin pour eclipse (lien sur la page indiquée).

Aurélien Barbier-Accary.


Bjr,

Maven est vraiment un bon outil mais pour les petits projets je préfère
rester sur ant (plus focalisé sur la construction ou les taches unitaires).

Car le fort de Maven est surtout pratique pour de la gestion de projet.
Et s'il est associé à une construction intégrée par exemple luntbuild
(ou cruisecontrol, maven/continuum ou hudson) et c'est vraiment le pied :)

Attention, mettre en place un environement de projet vraiment intégré
(subversion ou CVS + maven + luntbuild ou autre + fisheye ou statcvs
...) prend pas mal de temps et d'organisation.

Mais lorsqu'on commence un projet qui va durer au minimum 2 m-h, je
trouve que celà vaut largement la peine. Et gagnera pas mal de temps par
la suite.

A+
TM

Publicité
Poster une réponse
Anonyme