|
Page Suivante | |
Auteur | Sujet : tout ce que vous avez toujours voulu savoir sur le CLASSPATH |
Publicité | Posté le 17-06-2011 à 14:59:49 |
brisssou 8-/ | c'est juste que tu ne précises pas où lire tes fichiers.
--------------- HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris |
yoms |
Message édité par yoms le 17-06-2011 à 17:01:29 |
brisssou 8-/ |
yoms |
|
sasuke18 | Bonjour, svp je voudrai vous demander comment rajouter tout les .jar a classpath quand on en a plusieurs. merci |
sasuke18 | Bonjour, svp je voudrai vous demander comment rajouter tout les .jar a classpath quand on en a plusieurs et que c'est impossible de donner tous les path un par un. merci |
sasuke18 |
|
Publicité | Posté le 20-02-2012 à 17:47:38 |
basketor63 Gauche = TT | je crois qu'il "suffit" que la dll soit dans le path (pas le classpath) si c'est du jni donc au lancement un .bat avec un truc genre SET path=%path%;cheminDeTonDLL devrait aider il y a aussi une variable java.library.path qui est trouvable dans Système.properties( ) qui contient le classpath système mais la modifier dans l'application java n'a du coup pas d'effet car c'est trop tard Message cité 1 fois Message édité par basketor63 le 29-02-2012 à 12:38:20 |
LeRiton |
|
the real moins moins | mate comme jdesktop fait, par example. jpense y'a moyen de foutre le dll *dans* ton jar, par exemple --------------- Hey toi, tu veux acheter des minifigurines Lego, non ? |
basketor63 Gauche = TT |
|
LeRiton |
|
brisssou 8-/ |
LeRiton | J'ai fait quelques tests de plus. Fun fact : la librairie qui utilise le binaire ne renvoi pas d'erreur si quelque chose se passe mal, ce qui facilite grandement le debug, vous devez vous en douter. Soit la lib incriminée (Java Communications), composée de : le tout nécessite donc les droits d'admin. J'ai autour de ça une lib wrapper qui s'occupe d'installer le tout (quand utilisateur admin) et ajoute une couche d'abstraction. 1er test Une classe (appelons-la com.foo.Test dans com/foo/test.java) fait les appels nécessaires. La DLL est dans bin/, les libs et .properties dans lib/ La classe est exécutée par le bat suivant :
Et là Twingo, ça fonctionne \o/ On note pourtant qu'à aucun moment, je ne me préoccupe du fichier .properties, lui aussi dans lib/ 2ème test La même classe est montée en projet Maven, avec les dépendances vers comm.jar et wrapper.jar, le .properties et la DLL en resource, le tout génère un Jar with dependencies (le .properties et la DLL sont à la racine du Jar). Avant toute chose, le programme copie la DLL dans un répertoire temporaire contigüe au jar (.\bin), puis charge le fichier à l'aide de System.load(). Et là, c'est le drame, ça ne fonctionne plus (bien évidemment sans message d'erreur) /o\ Edit : le "pas de message d'erreur" semble pointer un défaut de chargement du .properties, pourtant à la racine du Jar généré. Je continue...
Je garde la piste, il faudrait pour ça que j'identifie si l'échec mentionné plus haut est dû au System.load(). Message cité 2 fois Message édité par LeRiton le 29-02-2012 à 16:40:54 |
the real moins moins | y'avait pas un fork/remplacement moins chiant que comm.jar qui était sorti y'a qques années ? --------------- Hey toi, tu veux acheter des minifigurines Lego, non ? |
LeRiton | Je suis pas au courant, mais si ça existe je suis plus que preneur ! Edit : RXTX demande une copie dans les mêmes répertoires que javax.comm, serialio est payant, jSSC demande que le projet final embarque l'une des DLL. Message cité 1 fois Message édité par LeRiton le 29-02-2012 à 17:39:42 |
the real moins moins | ha bah ché plus alors rxtx me dit qqch, donc ça doit etre ça qu'on a fini par utiliser, mais jte parle de y'a quasi 10 ans là --------------- Hey toi, tu veux acheter des minifigurines Lego, non ? |
LeRiton |
Moar tests Si durant le test 1, je n'inclue pas le binaire dans le PATH, le message d'erreur suivant est généré :
On est dans le contexte où les Jars sont dans le classpath, le .properties est dans le même répertoire mais pas explicitement chargé. Si on ajoute la DLL dans le PATH, ça roule, sinon message d'erreur plus haut. On repasse au test 2. Pour rappel, j'ai toutes les dépendances qui sont dans le même Jar exécutable (Jar with dependencies), et je tente les manips suivantes dans le code : Et bien là, ça fonctionne pas, mais sans message d'erreur. Plus fort, quand je supprime le load de la DLL (donc potentiellement même cas de figure que mon ce que j'expose plus haut avec le test 1), ça fonctionne toujours pas, mais sans aucun message d'erreur (même pas le "Error loading win32com..." ). J'avoue que je ne comprend pas. Tout se passe comme si la lib comm.jar était "appelée" avant ladite exécution du programme quand elle est explicitement incluse au classpath (test 1), et que ce n'était pas le cas quand son contenu est dans le Jar applicatif. Dites moi que vous avez une idée Message édité par LeRiton le 01-03-2012 à 11:53:29 |
basketor63 Gauche = TT | idéalement tu dois avoir quelques .properties en dehors des jars, pour pouvoir changer sans recompiler
Message cité 1 fois Message édité par basketor63 le 01-03-2012 à 16:35:12 |
LeRiton |
|
basketor63 Gauche = TT | L'interface JNI, Java Native Interface à justement pour but de découpler le code binaire du byte code.
Message cité 1 fois Message édité par basketor63 le 02-03-2012 à 10:29:34 |
LeRiton |
|
basketor63 Gauche = TT | comm.jar il a besoin de la librairie .dll on est d'accords ? Message édité par basketor63 le 02-03-2012 à 14:35:11 |
basketor63 Gauche = TT | le test 1 ok, ça marche donc rien à comprendre
Message cité 1 fois Message édité par basketor63 le 02-03-2012 à 15:16:18 |
LeRiton |
je me suis mal exprimé. C'est un Jar with dependencies, les dépendances sont désarchivées et inclues dans le Jar (les classes des dépendances copiées dans le Jar exécutable).
Étant donné que ça fonctionne quelque soit la localisation du Jar, je pense plutôt à un System.loadLibrary(), qui lui prend un nom de librarie dispo dans le path. Sauf que ça n'explique pas pourquoi le premier test marche et pas le second, puisque la lib est dans les cas dispo dans le path. Also, si c'est ce que se contente de faire la lib, ça n'explique pas pourquoi ça ne marche pas quand je charge explicitement la DLL avant tout appel à comm. Edit : j'ajoute que System.loadLibrary() fonctionne. Si la lib indiquée n'étant pas présente dans le PATH, j'aurais droit à une exception. Si je résume, la DLL est chargée dans les deux cas, donc y'a bien autre chose qui fait foirer le truc. Message édité par LeRiton le 02-03-2012 à 15:30:57 |
LeRiton | Pour éviter de continuer la pollution du topic classpath, la suite ici : http://forum.hardware.fr/hfr/Progr [...] 6363_1.htm |
the real moins moins | package bibliotheque ; --> java bibliotheque.Truc Message édité par the real moins moins le 25-09-2013 à 00:12:02 --------------- Hey toi, tu veux acheter des minifigurines Lego, non ? |
Tyr4 | D'accord, merci pour ton aide.
|
Tyr4 | . Message édité par Tyr4 le 25-09-2013 à 07:01:24 |
Publicité | Posté le |
Page Suivante |
Sujets relatifs | |
---|---|
[PHP] Comment faites vous pour savoir quel champ n'est pas renseigné ? | [PHP] savoir si un champs est vide ou pas... |
[API] Comment savoir si la queue d'impression est vide ou non ? | driver JDBC, Problème de ClassPath [Résolu] |
[Javascript] Savoir si une date est postérieure à une autre | tout savoir sur L'asp et excel ...... et peut etre le vba? |
[C] savoir si un fichier est déjà ouvert | [Javascript] Peut-on savoir le nombre d'appel à une fonction ? |
[JAVA]Savoir ce qui se passe quand click sur une scrollbar | [Javascript] Savoir si qqch a été sélectionné dans un select multiple |
Plus de sujets relatifs à : tout ce que vous avez toujours voulu savoir sur le CLASSPATH |