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

Problème de classpath entre jre et Java web start

1 réponse
Avatar
Thierry
Bonjour,

J'ai une application qui est déployée avec Java web start.
Elle utilise des jar écrits par des "third-parties". (jxl.jar entre autre)
J'ai donc placé ces jar sur mon serveur et créé un fichier jnlp pour qu'ils
soient chargés et utilisés par mon application.

Seulement certains utilisateurs ont une version plus ancienne et incompatible de
jxl.jar dans leur répertoire d'extension (jre_path/lib/ext).
Sûrement installée par une autre application Java.

Au démarrage de mon appli, c'est le jar qui se trouve dans le répertoire
d'extension qui est utilisé et non le jar qui est spécifié dans mon fichier
jnlp.
Et du coup mon appli. ne fonctionne plus.

Comment puis-je m'en sortir ?

J'ai cherché sur le WEB, et il semble que pour un application lancée par une
ligne de commande "java ....", le répertoire d'extension soit inspecté avant le
user class-Path.
(Mais dans ce cas on doit pouvoir s'en sortir en démarrant le programme
avec -Djava.ext.dirs="" )

Je n'ai par contre pas trouvé d'information exhaustive sur la façon de trouver
les classes avec Java web start.
Mais j'ai l'impression que tous les jar indiqués dans le jnlp sont considérés
comme étant des jar utilisateurs.
Y a-t-il un paramètre dans le fichier jnlp qui permette de supprimer
l'utilisation du répertoire d'extension ?

Merci d'avance,
Thierry

1 réponse

Avatar
TestMan
Bonjour,

J'ai une application qui est déployée avec Java web start.
Elle utilise des jar écrits par des "third-parties". (jxl.jar entre autre)
J'ai donc placé ces jar sur mon serveur et créé un fichier jnlp pour qu'ils
soient chargés et utilisés par mon application.

Seulement certains utilisateurs ont une version plus ancienne et incompatible de
jxl.jar dans leur répertoire d'extension (jre_path/lib/ext).
Sûrement installée par une autre application Java.

Au démarrage de mon appli, c'est le jar qui se trouve dans le répertoire
d'extension qui est utilisé et non le jar qui est spécifié dans mon fichier
jnlp.
Et du coup mon appli. ne fonctionne plus.

Comment puis-je m'en sortir ?

J'ai cherché sur le WEB, et il semble que pour un application lancée par une
ligne de commande "java ....", le répertoire d'extension soit inspecté avant le
user class-Path.
(Mais dans ce cas on doit pouvoir s'en sortir en démarrant le programme
avec -Djava.ext.dirs="" )

Je n'ai par contre pas trouvé d'information exhaustive sur la façon de trouver
les classes avec Java web start.
Mais j'ai l'impression que tous les jar indiqués dans le jnlp sont considérés
comme étant des jar utilisateurs.
Y a-t-il un paramètre dans le fichier jnlp qui permette de supprimer
l'utilisation du répertoire d'extension ?

Merci d'avance,
Thierry


Bonjour,

Chouette, j'aime bien ce genre de question :o)

Comme tu l'as comprit, si un JAR est installé dans lib/ext il est
installé comme extension standard (en manuel), et il est impossible pour
une application de le "masquer" de même qu'il est impossible de masquer
les classes du bootclasspath (package java.* par exemple), et fort
heureusement.

En attendant que le JSR Java Module nous sauvent tous des dépendances et
gestion de version et nous permette de demander par exemple une mise à
jour, il va donc valoir trouver une alternative ...

Voici ma proposition :
- auditer les machines impactées afin de vérifier la version du JRE
maximum utilisée dans ton contexte
- forcer l'utilisation d'une nouvelle VM avec version+1 ;-)

C'est un peu brutal, mais représente une solution tant que la version
maximum constatée est inférieure à la version actuelle de Sun.
La seule alternative qui me vient est de te faire un "jxl-bis" avec des
classes ayant un nom de paquet différent (encore plus brutal, et ....
"vraiment pas beau" car c'est toi qui gère les "racourcis" pris par les
autres).

Enfin, trouver les "plaisantins" qui jouent avec le lib/ext comme bac à
sable de leur appli et leur "indiquer gentillement" que c'est un lieu
public et que ce genre de bricolage n'est pas souhaitable et qu'il
doivent uiliser d'autres solutions : webstart/extension, installateur, ...

Pour finir, vous mettre d'accord sur un serveur commun d'extensions
webstart que vous souhaites utilisez (un simple Tomcat ou GlassFish
ferra l'affaire).

A+
TM