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

JWS Java Discussion :

[FatJar] Besoin d'aide pour définir fichier jnlp


Sujet :

JWS Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 17
    Points
    17
    Par défaut [FatJar] Besoin d'aide pour définir fichier jnlp
    Bonjour à tous,

    Alors que beaucoup sont en rtt, je me prends la tete sur mon appli. Il s'agit d'une interface swing qui affiche et écrit des infos sur un serveur AS400.
    J'ai des dépendances dans mon projet, j'ai donc créer mon Jar avec FatJar et celui ci s'exécute bien sur ma machine.
    J'ai également signé ce meme jar.

    Par contre j'ai un souci lorsque je créés mon fichier jnlp, la class oneJar de FATJAR ne trouve plus mon Main.

    Voici le jar générer par fatjar:



    Et voici mon jnlp actuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="utf-8"?>
    <jnlp spec="1.0+" codebase="http://........" href="3M.jnlp">
    	<information>
    		<title>Interface</title>
    		<vendor>Moi Meme</vendor>
     
    	</information>
      <security> 
        <all-permissions/> 
      </security>
    	<resources>
    		<j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/>
    		<jar href="appli3M.jar"/>
     
     
    	</resources>
     
    <application-desc />
    </jnlp>
    Et enfin voici l'erreur obtenue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    java.lang.ClassNotFoundException: application.Main
    	at com.simontuffs.onejar.JarClassLoader.findClass(JarClassLoader.java:444)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at com.simontuffs.onejar.Boot.run(Boot.java:245)
    	at com.simontuffs.onejar.Boot.main(Boot.java:105)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
    	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
    	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
    	at com.sun.javaws.Launcher.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Vraiment j'ai du mal à voir comment faire, et je trouve pas de réponses sur le net

  2. #2
    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,


    FatJar utilise un ClassLoader particulier pour charger les classes de l'application, et cela pose des problèmes avec Java Web Start (ce dernier empêche de trop manipuler les ClassLoaders).
    Pour info c'est dans la liste des "feature request" de FatJar : : Java Web Start Support.


    Mais si je peux comprendre l'intérêt de FatJar dans un déploiement "standard", je dois avouer que j'ai du mal à comprendre son intérêt avec Java Web Start !?!

    Pourquoi ne pas utiliser ton fichier *.jnlp pour renseigner ton classpath ?

    a++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par adiGuba
    Mais si je peux comprendre l'intérêt de FatJar dans un déploiement "standard", je dois avouer que j'ai du mal à comprendre son intérêt avec Java Web Start !?!

    Pourquoi ne pas utiliser ton fichier *.jnlp pour renseigner ton classpath ?

    a++
    En fait je voulais tout simplement inclure les jar dont j'ai besoin dans mon interface dans le jar de mon appli, mais si tu as une autre solution je suis preneur

  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
    Perso j'utiliserais des jars standards...

    1. Un répertoire lib/ qui contiendrait tous les jars "externes". Ce répertoire doit être situé dans le même répertoire que le jar principal de l'application (et surtout pas dans le jar).
    2. Mon jar principale contiendrait dans son Manifest les lignes suivantes :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Main-Class: com.package.MaClassePrincipale
      Class-Path: lib/fic1.jar lib/fic2.jar lib/fic3.jar
      Main-Class définit la classe principale de l'application, et Class-Path les librairies supplémentaires à ajouter au classpath. (les chemins sont relatif au répertoire du jar principal)


    Ceci permet d'exécuter le jar en local de manière standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar MonJarPrincipal.jar
    Bien sûr il faut que l'arborescence soit correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     +-> MonJarPrincipal.jar
     +-> lib/
           +-> fic1.jar
           +-> fic2.jar
           +-> fic3.jar


    Ensuite il suffit de reproduire la même chose lorsque tu déploies via JWS, en spécifiant les archives dans le fichier *.jnlp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <resources>
    	<j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/>
     
    	<!-- Jar principal : -->
    	<jar href="MonJarPrincipal.jar" main="true"/>
     
    	<!-- Autres librairies : -->
    	<jar href="lib/fic1.jar"/>
    	<jar href="lib/fic2.jar"/>
    	<jar href="lib/fic3.jar"/>
     
    </resources>
    Le gros avantage c'est que cela limite les téléchargement lors des modifications

    a++

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Merci pour le coup de main, je vais tester ça de suite!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    J'ai créé mon répertoire lib, j'ai modifié mon manifest, et mon jar est dans le meme répertoire, mais il ne trouve pas les librairies?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Manifest-Version: 1.0
    Main-Class: application.Main
    Class-Path: lib/antlr-2.7.6.jar lib/asm-attrs.jar lib/asm.jar lib/cglib-2.1.3.jar lib/commons-collections-3.0.jar lib/commons-logging-1.0.4.jar lib/dbunit-2.2.jar lib/dom4j-1.6.1.jar lib/ehcache-1.2.3.jar lib/hibernate3.jar lib/jt400.jar lib/jta.jar lib/log4j.jar lib/odmg-3.0.jar lib/oscache-2.1.jar lib/dbunit-2.2.jar lib/skinlf.jar lib/xalan-2.4.0.jar lib/xerces-2.4.0.jar lib/xml-apis.jar

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Bon je ne sais toujours pas pourquoi mon jar principal ne retrouve pas ses librairies malgré le manifest, donc je zappe java web start pour le moment

    Bon je viens de trouver la solution...:

    Warning : The text file must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.
    Fallait le savoir...

  8. #8
    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 CaptainT
    Bon je ne sais toujours pas pourquoi mon jar principal ne retrouve pas ses librairies malgré le manifest, donc je zappe java web start pour le moment
    Le manifest c'est seulement pour l'exécution en local.
    Pour Java Web Start il faut spécifier chaque librairie dans le fichier *.jnlp.

    a++

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par adiGuba
    Le manifest c'est seulement pour l'exécution en local.
    Pour Java Web Start il faut spécifier chaque librairie dans le fichier *.jnlp.

    a++
    Non en fait ça ne marchait meme pas en local... mais j'ai trouvé la solution cf au dessus.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Nouveau problème, mon appli se lance mais elle n'arrive pas à récupérer des infos dans mes .properties, alors que ça passe sans pb en local, comment pourrais-je faire?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    Alors, existe-t-il une solution pour ajouter dynamiquement des jars au classpath lorsque une application est lancée par JWS ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Développement, conception technique et qualité de code
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développement, conception technique et qualité de code

    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Foub Voir le message
    Alors, existe-t-il une solution pour ajouter dynamiquement des jars au classpath lorsque une application est lancée par JWS ?
    Oui.
    Le serveur peut toujours enrichir le fichier JNLP au moment où il lui est demandé.
    Il intercepte la demande, lit le JNLP, le modifie et envoie le résultat.

    J'ai fait ça une fois en Java, j'ai tout mis dans JnlpFileHandler.java

Discussions similaires

  1. Réponses: 16
    Dernier message: 13/08/2014, 18h20
  2. Générer un fichier word ou excel en php
    Par Taz_8626 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/05/2011, 09h57
  3. besoin d'aide pour les fichier binaires
    Par momo31 dans le forum C++
    Réponses: 1
    Dernier message: 06/04/2010, 08h19
  4. Besoin d'aide pour recuperer les fichier d'un projet
    Par barthelv dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 14/04/2006, 11h47

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