3 votes

Problèmes de classpath du Java Manifest.mf

J'ai essayé d'exécuter un fichier jar - appelons-le test.jar - qui utilise le fichier jconn3.jar de Sybase sur un système Unix.

J'ai créé un fichier MANIFEST.MF qui comporte les éléments suivants :

Class-Path: $SYBASE/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

Cela donne une ClassNotFoundError. $SYBASE est la variable système qui pointe vers /opt/sybase13 ; j'ai également essayé ce qui suit :

Class-Path: /opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

et

Class-Path: opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

Cependant, si je copie le fichier jconn3.jar de $SYBASE/jConnect-6_0/classes dans le même répertoire que test.jar, et que je mets à jour mon MANIFEST.MF comme suit :

Class-Path: jconn3.jar commons-net-1.3.0.jar

L'application fonctionne comme prévu.

J'ai pu vérifier que le fichier jconn3.jar fonctionne en le copiant localement ; mon fichier MANIFEST.MF contient le chemin d'accès à ma classe principale, ce n'est donc pas le problème ici.

A votre avis, quel pourrait être le problème ? Je regarde cette chose depuis trop longtemps maintenant. Merci.

12voto

erickson Points 127945

Les entrées dans le class-path sont soit relatives au JAR dans lequel elles sont intégrées (ce que vous avez fait), soit des URL. Pour que vos chemins absolus fonctionnent, vous devrez les convertir en URLs, par exemple,

file:/opt/sybase13/...

Il n'y a pas de mécanisme pour utiliser les variables.

Bien que la spécification JAR ne l'indique pas clairement, les données absolues file: Les URL de schéma fonctionnent dans l'attribut class-path.

0voto

OscarRyz Points 82553

Les variables d'environnement ne sont pas lues par le classloader AFAIK. Cependant vous pouvez ajouter le jar dans une configuration script.

Selon la spécification, les entrées sont relatives à la jarre et non absolues :

Class-Path :

La valeur de cet attribut spécifie les URL relatives des extensions ou des bibliothèques dont cette application ou cette extension a besoin. Les URL sont séparées par un ou plusieurs espaces. Le chargeur de classes de l'application ou de l'extension utilise la valeur de cet attribut pour construire son chemin de recherche interne.

http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html #Spécification du manifeste

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X