Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JAVA] Projet exporté en JAR

ne veut pas s'exécuter

    21 avril 2008 à 12:26:47

    Bonjour,

    j'ai terminé une petite application utilisant des règles métiers (avec Drools)
    lorsque j'exécute mon projet via Eclipse, tout fonctionne, mes fichiers sont créés.
    Mais lorsque j'exécute le fichier JAR, il n'y a qu'un seul fichier de créé, celui qui doit etre créé via les rules ne se crée pas .


    d'où vient le problème?

    merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      23 avril 2008 à 8:24:22

      personne pour m'aider?
      • Partager sur Facebook
      • Partager sur Twitter
        23 avril 2008 à 9:11:55

        je ne connais pas Drools...Mais sans code c'est difficile te t'aider...

        Au pif je dirai que tu as des chemins absolu dans tes classes et que l'endroit où se trouve ton .jar ne correspond plus...
        • Partager sur Facebook
        • Partager sur Twitter
          23 avril 2008 à 9:52:17

          les seuls chemins absolu que j'ai sont ceux pour accéder aux différents fichiers

          C:\dossier1\dossier2\....\fichier.txt
          • Partager sur Facebook
          • Partager sur Twitter
            23 avril 2008 à 10:19:53

            Comme je te l'ai dit... Sans code c'est difficile ^^
            • Partager sur Facebook
            • Partager sur Twitter
              23 avril 2008 à 10:38:50

              lorsque j'exécute mon application à partir d'eclipse, je n'ai aucun problèmes, c'est lorsque je lance mon JAR :(

              package traitements;
              
              import java.io.BufferedReader;
              import java.io.File;
              import java.io.FileNotFoundException;
              import java.io.FileReader;
              import java.io.IOException;
              import java.util.Vector;
              
              import javax.swing.JOptionPane;
              
              public class LectureFichiers {
              	static final long serialVersionUID = 1L;
              
              	private File nomFichier = null;
              
              	private StringBuffer tampon = null;
              	private String cheminNomFichierFormations = null;
              	private String cheminFichierDinasti = null;
              	private String cheminNomFichierDE = null;
              	private String dinasti = null;
              	
              	private EcritureFichier ef = null;	
              	private Traitements traitements = null;
              	private Message message = null;	
              	
              	private String texte = "";
              	private String tab[] = null;	
              	
              	public LectureFichiers() {
              		super();
              		
              		cheminNomFichierFormations = "M:\\Benoit\\Fichiers\\FLUX_FP.txt";
              		cheminFichierDinasti = "M:\\Benoit\\Fichiers\\FLUX_DINASTI.csv";
              		cheminNomFichierDE = "M:\\Benoit\\Fichiers\\fichierDE.txt";
              	}
              
              	public void afficherContenu(String argNomFichier) {
              		try {
              			nomFichier = new File(argNomFichier);
              			new FileReader(nomFichier);
              		} catch (Exception e) {
              			e.printStackTrace();
              		}
              
              		// Sortir les informations du fichier
              		if (nomFichier.isFile()) {			
              			traitements = new Traitements();
              			try {	
              				@SuppressWarnings("unused")
              				BufferedReader entree = null;
              				tampon = new StringBuffer();
              				entree = new BufferedReader(new FileReader(nomFichier));				
              				
              				ef = new EcritureFichier();
              				ef.creerFichier();
              				
              				// Parcours du fichier des DE
              				lectureFichierDE(cheminNomFichierDE);
              				ef.fermerFichier();	
              				
              			} catch (IOException e) {
              				e.printStackTrace();
              				JOptionPane.showMessageDialog(null, "ERREUR FICHIER",
              					"ERREUR FICHIER", JOptionPane.ERROR_MESSAGE);
              			}
              		}
              	}	
              	
              	// Parcours du fichier des DE
              	public void lectureFichierDE(String nomFichierDE) {
              		BufferedReader entree = null;
              		tampon = new StringBuffer();
              		try {
              			entree = new BufferedReader(new FileReader(nomFichierDE));
              		
              			try {
              				while ((texte = entree.readLine()) != null) {
              					tab = texte.split( "	");
              					if("00".equals(tab[0]) || "02".equals(tab[0]) || "07".equals(tab[0])) {
              						lectureFichierFormations(cheminNomFichierFormations, tab[3], tab[0], texte);
              					}
              				}
              			} catch (IOException e) {
              				e.printStackTrace();
              			}		
              		} catch (FileNotFoundException e) {
              			e.printStackTrace();
              		}
              	}
              	
              	// Parcours du fichier des formations
              	public void lectureFichierFormations(String nomFichierFormations, String niss, String categorie, String donnees) {
              		BufferedReader entree = null;
              		tampon = new StringBuffer();
              
              		try {
              			entree = new BufferedReader(new FileReader(nomFichierFormations));
              		
              			try {
              				while ((texte = entree.readLine()) != null) {	
              					tab = texte.split( "	");
              					String infos = null;
              					if(niss.equals(tab[2])) {						
              						infos = categorie + "	" + tab[0] + "	" + tab[1] +  "	" + niss + "	" 
              							+ tab[3] + "	" + tab[15] + "	" + tab[16] + "	";
              
              						lectureFichierDinasti(niss, infos);
              					}	
              				}
              			} catch (IOException e) {
              				e.printStackTrace();
              			}		
              		} catch (FileNotFoundException e) {
              			e.printStackTrace();
              		}
              	}
              	
              	// Parcours du fichier Dinasti
              	public void lectureFichierDinasti(String niss, String donnees) {
              		BufferedReader buffReader;
              		Vector<String> currentLine = null;
              		
              		try {
              			buffReader = new BufferedReader(new FileReader(cheminFichierDinasti));
              			
              			if (buffReader != null) {
              				try {					
              					String tempLine = null;
              					tempLine = buffReader.readLine();
              					tampon = new StringBuffer();
              												
              					while (tempLine != null) {
              						currentLine = new Vector<String>();
              
              						currentLine.add(tempLine);
              						String texte = "" + currentLine;
              						texte = texte.substring(1, (texte.length() - 1));
              						String tab[] = texte.split(";");										
              						
              						if(niss.equals(tab[0])) {	
              							dinasti = tab[3];
              							applicationDesRules(donnees+dinasti);
              						}						
              						
              						tempLine = buffReader.readLine();
              					}				
              				} catch (IOException e) {
              					JOptionPane.showMessageDialog(null, "Erreur lecture fichier CSV: "
              							+ e.toString());
              				} finally {
              					try {
              						buffReader.close();
              					} catch (IOException e) {
              						JOptionPane.showMessageDialog(null, "Erreur fermeture fichier CSV: "
              								+ e.toString());
              					}
              				}
              			}
               
              		} catch (FileNotFoundException e1) {
              			e1.printStackTrace();
              		}
              		System.runFinalization();
              		System.gc();
              	}
              	
              	
              	public void applicationDesRules(String donnees) {
              		GestionDates gestionDates = new GestionDates();
              		
              		String tabDonnees[] = null;
              		tabDonnees = donnees.split( "	");
              		
              		String categorie = null;
              		categorie = tabDonnees[0];
              		
              		gestionDates.calculerAge(tabDonnees[4]);
              		int age = 0;
              		age = Integer.parseInt(gestionDates.getAge());
              				
              		message = new Message();
              		
              		message.setCategorie(categorie);				
              		
              			String dinasti = "";
              			dinasti = tabDonnees[7];
              			
              				message.setCategorie(categorie);
                          	message.setAge(age);
                          	message.setDinasti(dinasti);
                          	
                          	try {
                          		traitements.rules("Dinasti", message);
              				
                          	if(message.getEtat() == 1) {
                          		traitements.rules("CategoriesSuggerees", message);
                          		String categorieSuggeree = message.getCategoriesSuggerees();
                          		ef.ecrireFichier(donnees + "	" + categorieSuggeree + "\n");
                          	}
                          	} catch (Exception e) {
              					e.printStackTrace();
              				}
              	}	
              	
              	public File getNomFichier() {
              		return nomFichier;
              	}
              
              	public void setNomFichier(File nomFichier) {
              		this.nomFichier = nomFichier;
              	}
              
              	public StringBuffer getTampon() {
              		return tampon;
              	}
              
              	public void setTampon(StringBuffer tampon) {
              		this.tampon = tampon;
              	}
              
              	public String getCheminNomFichierFormations() {
              		return cheminNomFichierFormations;
              	}
              
              	public void setCheminNomFichierFormations(String cheminNomFichierFormations) {
              		this.cheminNomFichierFormations = cheminNomFichierFormations;
              	}
              
              	public String getCheminNomFichierDE() {
              		return cheminNomFichierDE;
              	}
              
              	public void setCheminNomFichierDE(String cheminNomFichierDE) {
              		this.cheminNomFichierDE = cheminNomFichierDE;
              	}
              }
              




              package traitements;
              import java.io.InputStreamReader;
              import java.io.Reader;
              
              import org.drools.RuleBase;
              import org.drools.RuleBaseFactory;
              import org.drools.WorkingMemory;
              import org.drools.compiler.PackageBuilder;
              import org.drools.rule.Package;
              
              public class Traitements {
              
              	private Reader source = null;
              	private PackageBuilder builder = null;
              	private Package pkg = null;
              	private RuleBase ruleBase = null;
              	private WorkingMemory workingMemory = null;
              	
              	public Traitements() {
              		super();
              	}
              	
              	// Méthode qui traite les fichiers contenant les règles métiers
              	public void rules(String fich, Message message) throws Exception {
                  	source = new InputStreamReader( Traitements.class.getResourceAsStream( "/" + fich + ".drl" ) );
                  	builder = new PackageBuilder();
                  	
                  	builder.addPackageFromDrl( source );
                  	
                      if ( builder.hasErrors() ) {
                          System.out.println( builder.getErrors().toString() );
                          throw new RuntimeException( "Unable to compile \"" + fich + ".drl\".");
                      }
              
                      pkg = builder.getPackage();
                      
                      ruleBase = RuleBaseFactory.newRuleBase();
                      ruleBase.addPackage( pkg );
                  	
                      workingMemory = ruleBase.newStatefulSession();
                      
                      workingMemory.insert( message );
                      workingMemory.fireAllRules();
              	}
              }
              
              • Partager sur Facebook
              • Partager sur Twitter
                25 avril 2008 à 10:34:28

                le manifest
                Manifest-Version: 1.0
                Classpath: org.drools.eclipse_4.0.4.jar
                Main-Class: Lancement
                



                l'exception suite à la commande java -jar
                il est dit qu'il me manque une classe, mais je ne vois pas comment régler le problème :(

                C:\Documents and Settings\jcqbnt\My Documents>java -jar "Créer fichier d'erreurs.jar"
                Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/drool
                s/WorkingMemory
                        at Lancement.go(Lancement.java:53)
                        at Lancement$1.actionPerformed(Lancement.java:42)
                        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
                        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
                        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
                        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
                        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
                ce)
                        at java.awt.Component.processMouseEvent(Unknown Source)
                        at javax.swing.JComponent.processMouseEvent(Unknown Source)
                        at java.awt.Component.processEvent(Unknown Source)
                        at java.awt.Container.processEvent(Unknown Source)
                        at java.awt.Component.dispatchEventImpl(Unknown Source)
                        at java.awt.Container.dispatchEventImpl(Unknown Source)
                        at java.awt.Component.dispatchEvent(Unknown Source)
                        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
                        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
                        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
                        at java.awt.Container.dispatchEventImpl(Unknown Source)
                        at java.awt.Window.dispatchEventImpl(Unknown Source)
                        at java.awt.Component.dispatchEvent(Unknown Source)
                        at java.awt.EventQueue.dispatchEvent(Unknown Source)
                        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
                 
                        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
                        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                        at java.awt.EventDispatchThread.run(Unknown Source)
                
                • Partager sur Facebook
                • Partager sur Twitter
                  25 avril 2008 à 11:15:03

                  Un nom de jar avec des espaces o_O !

                  Sinon l'erreur est à la ligne 53 => méthode go()...
                  faire voir ta classe...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 avril 2008 à 11:19:45

                    [EDIT] ben cela ne change rien avec ou sans espaces, je viens de tester
                    voila

                    import java.awt.Container;
                    import java.awt.FlowLayout;
                    import java.awt.event.ActionEvent;
                    import java.awt.event.ActionListener;
                    import java.awt.event.WindowAdapter;
                    import java.awt.event.WindowEvent;
                    
                    import javax.swing.JButton;
                    import javax.swing.JFrame;
                    import javax.swing.JOptionPane;
                    import javax.swing.JPanel;
                    
                    import traitements.LectureFichiers;
                    import traitements.Traitements;
                    
                    public class Lancement extends JFrame {
                    	private static final long serialVersionUID = 1L;
                    
                    	private LectureFichiers lf = null;
                    	@SuppressWarnings("unused")
                    	private Traitements traitements = null;
                    	
                    	private JPanel panneau = null;
                    	private JButton boutonLancement = null;
                    	
                    
                    	public Lancement() {
                    		super("Stage");
                    		Container conteneur = getContentPane();
                    		conteneur.setLayout(new FlowLayout());
                    
                    		panneau = new JPanel();
                    		boutonLancement = new JButton("Démarrer l'application");
                    
                    		panneau.add(boutonLancement);
                    		
                    		conteneur.add(panneau);
                    				
                    		boutonLancement.addActionListener(
                    				new ActionListener() {
                    					public void actionPerformed (ActionEvent e) {
                    						go();
                    					}
                    				}
                    		);
                    				
                    		setSize(300, 100);
                    		setVisible(true);
                    		setResizable(false);
                    	}
                    
                    	public void go() {	
                    		lf = new LectureFichiers();		
                    		lf.afficherContenu(lf.getCheminNomFichierDE());
                    					
                    		int reponse = JOptionPane.showConfirmDialog(null, "Création du fichier d'erreurs terminée.\nVoulez-vous quitter l'application?", "Quitter?", JOptionPane.YES_NO_OPTION);
                    		if(reponse == 0) {
                    			JOptionPane.showMessageDialog(null, "Démarrez le serveur avec \"Démarrer le serveur.bat\" \net ensuite allez à la page http:\\\\127.0.0.1:8080/Application/CategoriesProblemes");
                    			System.exit(0);
                    		}
                    	}
                    
                    	public void actionPerformed( ActionEvent e) {
                    	}
                    	
                    	public static void main(String[] args) {
                    		Lancement lancement = new Lancement();
                    		
                    		lancement.addWindowListener(
                    				new WindowAdapter() {
                    					public void windowClosing(WindowEvent e) {
                    						int reponse = JOptionPane.showConfirmDialog(null, "Voulez-vous quitter l'application?", "Quitter?", JOptionPane.YES_NO_OPTION);
                    						if(reponse == 0) System.exit(0);
                    					}
                    				}
                    		);
                    	}
                    }
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 avril 2008 à 12:13:34

                      Petite question, dans ton Manifest (fichier de définition d'un JAR exécutable) :
                      Classpath: org.drools.eclipse_4.0.4.jar

                      Dis moi exactement ou tu as mis cette librairie, et son nom ?

                      (à savoir qu'il vaut mieux donner des noms sans '.' à java, il a tendance à les remplacer par des '/' ou '\' suivant le système).

                      Parce que c'est là qu'est ton problème ... Tu ne charge pas la librairie du coup il ne trouve pas les Class !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 avril 2008 à 12:17:47

                        le jar org.drools.eclipse_4.0.4.jar setrouve dans le répertoire "plugin" d'eclipse
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 avril 2008 à 13:41:11

                          mets le à la racine de ton JAR ! Fais en une copie !

                          Genre ton jar est dans C:\toto , tu mets la librairie dans C:\toto

                          Voila !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 avril 2008 à 14:03:52

                            cela ne fonctionne pas non plus :(

                            et ici; je dois cocher toutes les cases? (.classpath, .project)

                            Image utilisateur
                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 avril 2008 à 14:37:54

                              Il te mets quoi comme erreur quand tu mets le org.drools.eclipse_4.0.4.jar dans le même dossier ?

                              Et à la limite, renomme le ! Mets le en "drools.jar" ... Et édite ton manifest du coup !

                              (renome le .jar en .zip, entre dans le dossier META-INF et change le fichier MANIFEST.MF )

                              Ce fichier, tu change uniquement le :
                              Classpath: org.drools.eclipse_4.0.4.jar
                              En :
                              Classpath: drools.jar

                              Si tu as un manifest perso (que t'as toi même écrit), change le directement dedans et regénère le jar dans eclipse !

                              Attention, dans eclipse, pour le jar, faut que t'aille à la dernière page de configuration, pour lui dire d'utiliser un fichier Manifest personnel !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                25 avril 2008 à 14:46:25

                                cela ne fonctionne pas non plus :(

                                voilà l'erreur, c'est toujours la même

                                C:\Documents and Settings\jcqbnt\My Documents>java -jar erreurs.jar
                                Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/drool
                                s/WorkingMemory
                                        at traitements.LectureFichiers.afficherContenu(LectureFichiers.java:48)
                                        at Lancement.go(Lancement.java:54)
                                        at Lancement$1.actionPerformed(Lancement.java:42)
                                        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
                                        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
                                        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
                                        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
                                        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
                                ce)
                                        at java.awt.Component.processMouseEvent(Unknown Source)
                                        at javax.swing.JComponent.processMouseEvent(Unknown Source)
                                        at java.awt.Component.processEvent(Unknown Source)
                                        at java.awt.Container.processEvent(Unknown Source)
                                        at java.awt.Component.dispatchEventImpl(Unknown Source)
                                        at java.awt.Container.dispatchEventImpl(Unknown Source)
                                        at java.awt.Component.dispatchEvent(Unknown Source)
                                        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
                                        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
                                        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
                                        at java.awt.Container.dispatchEventImpl(Unknown Source)
                                        at java.awt.Window.dispatchEventImpl(Unknown Source)
                                        at java.awt.Component.dispatchEvent(Unknown Source)
                                        at java.awt.EventQueue.dispatchEvent(Unknown Source)
                                        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
                                
                                        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
                                        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                                        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                                        at java.awt.EventDispatchThread.run(Unknown Source)
                                
                                C:\Documents and Settings\jcqbnt\My Documents>
                                


                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 avril 2008 à 15:58:11

                                  Dans une console (windows ou linux) tape java -version. ^^
                                  Si la réponse n'est pas 1.6.X, la solution de ton problème est sans doute là. Installe la jdk 1.6 si cela n'est pas fait, et si c'est déjà fait associe la correctement dans les variables d'environnements de ton système et ca devrait aller. Coche aussi toutes les cases possible de ton projets lors de la création du jar ;) surtout le classPath.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 avril 2008 à 16:26:21

                                    j'ai la version 1.6 et cela ne fonctionne quand meme pas :(
                                    je commence à désespérer :(
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 avril 2008 à 1:44:01

                                      Citation : Tetarus

                                      Coche aussi toutes les cases possible de ton projets lors de la création du jar ;) surtout le classPath.



                                      :lol: Le fichier .classpath ne sert qu'à Eclipse, il n'est en aucun cas lié à la normalisation des JAR fait par SUN et dans ces conditions il ne sert absolument à rien dans un JAR !

                                      :-°

                                      Pour ton problème, faut vraiment que tu vérifies tout ! Une autre solution consiste à dézipper ton jar, et l'intégré directement dans tes fichiers .class généré préalablement !

                                      Ceci permet de ne plus avoir de classpath puisque tout sera dans le projet !

                                      (fait une copie du fichier de la licence d'utilisation pour l'intégrer à ton JAR ...)

                                      Mais bon, je vois pas où est ton problème ...

                                      Ou alors c'est pas la seul JAR de la librairie !


                                      Sinon, tu peux toujours de mettre à ANT ! C'est une sorte de MakeFile à la Java ... Tu peux notamment t'en servir pour lancer l'application également !
                                      (d'où le .classpath chez eclipse, ouvre le, tu verras, c'est de l'XML définissant les classpath ... Eclipse utilise simplement un ANT surchargé pour tester les applis que tu développes)
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [JAVA] Projet exporté en JAR

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown