IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Attribut d'une classe dans un JAR


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Attribut d'une classe dans un JAR
    Bonjour,

    Je bloque sur un problème :

    J'ai une application, qui est utilisée sur plusieurs PC, et que je maintient fréquement. Cette application est composée (grosso-modo) d'un exécutable qui fait appel à son fichier.jar (compilé sans les sources, juste les .class)

    Quand je fais une modif sur mon PC de développement, et qu'elle s'avère correcte, je souhaite la répandre sur tous les PC utilisant cette application.

    Pour cela, je songe à créer un 'mini' projet, qui sera lancé à la place de mon application. Son but sera :

    => Vérifier (par comparaison de taille/date de création) si le fichier.jar existant sur le PC est différent du fichier disponible à un emplacement réseau (la version à jour)
    => Si versions égales : lancer application.exe
    => Si versions différentes, proposer à l'utilisateur de mettre à jour (= copie/remplacement du fichier réseau => fichier local) puis lancer application.exe

    Mais pour plus de confort et de pratique, je souhaiterais pouvoir afficher la version de l'application, du fichier.jar qui est sur le réseau.

    Cette information est un attribut public de type String, dans une classe située dans le fichier .jar

    Ma question est donc :

    Comment, en java, puis-je faire pour, à partir d'un fichier jar spécifique (mais qui n'est pas situé dans les ressources du projet) récupérer une classe, puis un attribut spécifique de cette classe ?


    Si quelqu'un à des suggestions, je suis volontiers preneur

    Merci d'avance,
    Minimus.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    il faut charger le jar dans le classloader.


    Pourquoi se compliquer la vie à faire un système de mise à jour pareil? Avez vous pensé à utiliser java webstart pour gérer les mises à jour automatiques par le réseau?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Merci pour cette information, je ne connaissait pas ClassLoader, je vais tenter de mettre ça en oeuvre.

    Pour ce qui est de java WebStart, je ne sais pas du tout ce que c'est, un petit tour sur wiki ne me donne que des infos théoriques et rien de pratique, je n'en sais pas plus.

    De plus mon application ne doit en aucun cas être 'dérangée' par des restrictions de sécurité, ou des demandes de confirmation, et je vois qu'il y en a. Elle dialogue avec une grande quantité d'appareils de mesure via des protocoles propriétaires ou de laboratoire (donc assez compliqué à gérer), et la moindre perturbation extérieure peut casser des heures de mesures...

    Et l'application doit également pouvoir se lancer sur une machine isolée de manière simple, et avec un environnement java 1.5.06, or je vois (sauf si je me trompe) qu'il faut java 1.6 pour que cela fonctionne.

    Du coup je préfère faire ma petite application externe qui fera le boulot elle-même, cela ne devrait pas être si compliqué à mettre en place.

    Mais si je me trompe au sujet de Java Web Start, je veux bien quelques infos à son sujet !
    Minimus.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Java Web Start permet de simplifier le déploiement des applications Java, en gérant le téléchargement des versions plus récentes.

    D'un point de vue sécurité il faut signer l'application afin de lui donner tous les droits (et donc créer un certificat et l’autoriser lors du premier lancement). Cela peut être un peu contraignant mais une fois que c'est fait cela fonctionne exactement de la même manière, et la vérification de la version est fait à chaque lancement de l'application...





    Pour ton problème spécifique, une solution toute simple serait d'ajouter sur le serveur un simple fichier texte avec le dernier numéro de version de l'application. Ensuite il suffit de lire ce fichier pour déterminer si on doit faire la mise à jour ou pas

    a++

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Ok, merci pour ces précisions !

    Signer l'application, ça se fait comment ? Il y a un message d'alerte windows qui gère tout comme quand on installe certains drivers, ou c'est différent ?

    Et au niveau de l'implémentation, je vais devoir toucher à mon code, ou c'est déjà quelque chose de fait que je n'ai qu'à rajouter ?


    Ta solution de secours me semble tout à fait adaptée, je la garde sous le coude !

    Mais j'ai quand même envie de tenter le ClassLoader, j'ai vu qu'il existait également des JarLoader, j'aimerais pouvoir y arriver comme ça (pour ma connaissance personnelle !)


    Merci encore
    Minimus.

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Minimus Voir le message
    Signer l'application, ça se fait comment ?
    Comment signer un JAR ?

    Ensuite il faut faire un fichier *.jnlp qui contiendra le descriptif de ton application, et qui sera exécuté par Java Web Start.

    Plus d'info : Tutoriel Java Web Start

    Citation Envoyé par Minimus Voir le message
    Il y a un message d'alerte windows qui gère tout comme quand on installe certains drivers, ou c'est différent ?
    Tu auras un message comme celui-ci : http://sf.anu.edu.au/~vvv900/cct/app...-web-start.gif

    Citation Envoyé par Minimus Voir le message
    Et au niveau de l'implémentation, je vais devoir toucher à mon code, ou c'est déjà quelque chose de fait que je n'ai qu'à rajouter ?
    En spécifiant que tu veux tous les droits tu n'auras pas à toucher à ton code.

    Par contre via le package javaws.jnlp tu as une API spécifique qui permet de développer une application sans avoir besoin de ces droits (mais avec des possibilités restreintes).


    a++

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup pour ces informations, elles me sont très utiles !

    Je vais essayer cette méthode


    Minimus.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Solution
    Bonjour !

    J'ai fini par trouver la solution à mon problème, mais pas via Java Web Start.
    Je n'ai pas réussi à mettre en place le système JWS, j'ai donc continué à chercher du côté de ClassLoader, et ayant trouvé un JarLoader sur internet j'ai finalement réussi à accéder à ma classe contenant l'attribut recherché.
    Je préfère cette méthode car au moins, j'aurais tout fait de A à Z, et finalement c'est assez simple!

    Le seul inconvénient, le code du JarLoader ne fonctionne pas dans certains cas :
    -Récupérer la liste des classes s'il y a dans le lot des interfaces
    -Instancier une classe si son constructeur par défaut n'est pas vide (propriété de newInstance())
    -Instancier une classe si elle possède des méthodes statiques
    -Récupérer les attributs si la classe n'est pas instanciable.

    Du coup j'ai juste eu à mettre mon attribut dans ma classe de constantes (classe d'attributs générique au programme entier), et voilà !

    Ensuite je compare l'attribut du jar local et du jar distant, s'ils sont différents, je demande à l'utilisateur s'il veut effectuer la mise à jour. Si oui, le jar local est remplacé par le distant, mon launcher appelle l'exécutable de l'application et se ferme.

    Merci pour vos lumières !

    Minimus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. attribut d'une classe dans une textbox
    Par dadal56 dans le forum C#
    Réponses: 3
    Dernier message: 28/04/2010, 15h53
  2. Réponses: 1
    Dernier message: 01/06/2009, 10h56
  3. utiliser les attribut d'une classe dans une autre classe
    Par kaissaoui dans le forum Langage
    Réponses: 11
    Dernier message: 18/07/2007, 15h13
  4. methode pour exécuter une class dans un jar
    Par yann_p dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2006, 17h47
  5. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/04/2006, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo