Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Exécutable .jar

sheila, le jeudi 19 juin 2008 à 12:32:57
Bonjour,
Je voudrais faire un exécutable .jar en mettant dans le même .jar toutes les classes extérieures et le fichier .properties. Voici le contenu de mon fichier manifest.mf:

Manifest-Version: 1.0
Class-Path: classes12.jar
Created-By: 1.5.0_09 (Sun Microsystems Inc.)
Main-Class: com.pia.west.tools.grilledetauxIHM.InterfaceGrilleDetaux


ça ne marche pas, je n'arrive pas à me connecter à ma base de données. De plus, dois-je rajouter le path du fichier .properties?

Merci
Configuration: Windows 2000
Internet Explorer 6.0
Répondre à sheila  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sandul, le jeudi 19 juin 2008 à 12:35:36
Salut,

Il faut également mettre ton classpath dans le fichier manifest; pour un exemple, tu peux regarder ici: http://www.commentcamarche.net/forum/affich 6764261 java probleme de jar, post n° 4

A +
Répondre à sandul

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sheila, le vendredi 20 juin 2008 à 09:31:57
En fait, j'ai déjà créé un jar qui fonctionne. Dans un même dossier, j'ai le fichier properies, le jar et j'ai été obligée de créer un sous fichier lib dans lequel je mets ma classe externe (le fichier manifest étant bien ds le dossier META-INF). Je souhaitais pouvoir mettre dans le même jar tous ces fichiers annexes. Chose faite, mais, je ne vois pas le fichier properies (à partir duquel j'ai mes propriétés de connexion à ma base de donnée) et et je ne vois pas ma classe externe.

Ma question est de savoir s'il est possible de mettre dans jar le fichier de propriétés et les classes externes?

Merci
Répondre à sheila

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sandul, le vendredi 20 juin 2008 à 09:57:04
Oui, tu peux très bien inclure le fichier .properties dans le jar. A ce moment-là, tu peux avoir accès depuis ton code JAva avec quelque chose du genre
File configFile = new File("props/config.xml"); //$NON-NLS-1$
FileInputStream fis = new FileInputStream(configFile);
...

en supposant que le fichier config.xml réside dans un sous répertoire props à la racine du jar.

et j'ai été obligée de créer un sous fichier lib dans lequel je mets ma classe externe <== là je n'ai pas trop compris ce que tu veux faire... Quelle est exactement ta classe externe et quels sont les fichiers annexe dont tu parles? En ce qui concerne le jar, tu peux y inclure tout ton travail (fichiers class, fichiers de configuration comme le .properties, fichiers ressources comme les images...) et avoir dans le classpath du manifest les jars nécessaires (celui avec les drivers de la base de donnée, par exemple).

++
Répondre à sandul

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sheila, le vendredi 20 juin 2008 à 11:14:23
j'utilise classe12.jar. Avant même de ne pouvoir se connecter à ma base de données, mon jar ne vois toujours pas mon fichier de configuration (connexion.properties). Depuis éclipse, ça marche. Mais dans le jar, non. j'ai bien vérifier le chemin d'accès au fichier; c'est bien à partir le dossier de lancement de l'application. mais rien.
Répondre à sheila

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sandul, le vendredi 20 juin 2008 à 11:20:17
Utilises-tu un manager de connexion (genre DataSource)? Ben, un bout de code peut certainement aider, copie-colle ici la partie connexion à la base (y compris la partie accès à ton fichier properties). Copie-colle également la stack trace de l'erreur obtenue.

Et entoure ton code copié ici par des balises "code" pour la mise en page...
A+
Répondre à sandul

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sheila, le vendredi 20 juin 2008 à 12:01:06
voici le code qui me permet de lire le fichier properties:


    protected String getConfig(String fichier, String key) throws Exception
    {
    	//On construit l'adresse du fichier
//    	File leFichier = new File(System.getProperty("user.dir") + "/" + fichier);
    	String leFichier = System.getProperty("user.dir") + "/" +fichier;
    	File fic = new File(leFichier);
    	
System.out.println(fic.getAbsolutePath()+"fffffffffffffffffffffffffff");
    	// On fait pointer notre Properties sur ce fichier
    	FileInputStream fIs = new FileInputStream(leFichier);
        Properties config = new Properties();
        config.load(fIs);
        
        String tmp = config.getProperty(key);
        fIs.close();
        
        leFichier = null;
        fIs = null;
        config = null;
        
        if (tmp == null)
        {
        	System.out.println("ne veut pas marcher!!!!!!!!");
        	throw new Exception("La valeur correspondant à '" + key + "' n'existe pas dans le fichier '" + fichier+"'");
        }
        return tmp;
        
    }





je n'ai pas de message d'erreur à partir d'eclipse
Répondre à sheila

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sandul, le vendredi 20 juin 2008 à 12:12:49
Mé euh, cette paresse... :)

J'avais demandé également:
- le code de connexion à la BD (utilises-tu des valeurs dans le fichier properties?)
- le rapport d'erreur (j'avais bien lu que sous Eclipse il n'y a pas d'erreur, voyons^^ Tu l'exécutes en dehors d'Eclipse et copies-colles le rapport ==> pour ce faire, dans le try..catch tu mets un e.printStackTrace())

A+
Répondre à sandul

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sheila, le vendredi 20 juin 2008 à 14:19:35
voici le contenu de mon fichier de connexion

#Dernière mise a jour :
#Tue Jun 10 16:23:15 CEST 2008

suffixe=OWN

ip=192.15.35.8

sid=pir


Pour le stacktrace, je ne sais pas comment te le récupérer, vu q je l'exécute comme n'importe quelle autre application depuis mon bureau. à moins que j'ai rien compri...

merci encore pour ton aide
Répondre à sheila

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sandul, le vendredi 20 juin 2008 à 14:31:42
Sheila:

1. Le code de connexion fait référence au code Java qui permet l'ouverture de la connexion à la base de données. Exemple pour une base de données Oracle, écrit à la va-vite:
package tests;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;

import oracle.jdbc.pool.OracleDataSource;

public class OracleSPExec {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			OracleDataSource ods = new OracleDataSource();
			ods.setURL("jdbc:oracle:thin:user/password@myDBServer:1521/disp2"); //$NON-NLS-1$
			Connection conn = ods.getConnection();

			String jobquery = "begin tst(?); end;"; //$NON-NLS-1$
			CallableStatement callStmt = conn.prepareCall(jobquery);
			int a = 0;
			callStmt.setNull(1, Types.INTEGER);
			callStmt.execute();
			conn.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// nettoyage des ressources
		}
	}
}

Comme tu vois, il y a un certain nombre de paramètres (dans "jdbc:oracle:thin:user/password@myDBServer:1521/disp2") qui peuvent très bien faire l'objet d'une externalisation dans un fichier properties.

Je souhaiterais voir ce code de connexion.

2. Tu as un jar, disons myJar.jar avec un manifest bien renseigné (la class main, le classpath...) ==> tu peux l'exécuter en double-cliquant. La JVM va démarrer un processus appelé javaw sui l'exécutera, mais tu ne verras pas la sortie console. Pour voir la sortie, en supposant que myJar se situe dans c:\test, tu fais dans une console DOS:
cd c:\test
java -jar myJar.jar

==> tu auras accès à la console.

Oki? :)
Répondre à sandul

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sheila, le vendredi 20 juin 2008 à 15:16:30
oki!

code de connexion:

public class Bd {
	    
    /**
     * Constructeur
     * @throws Exception 
     */
    public Bd(String a_base) throws Exception {
        initConnection(a_base);
    }
    
    /** La connextion partagée par toute les requetes */
    protected  Connection conn = null;
    
    
    /** Paramètres de configuration de la connexion aux bases de données */
    protected Configuration conf = new Configuration(); //renvoie les paramètres lus dans le fichier de propriétes
    protected static String ip = null;
	protected static String suffixe = null;
	protected static String sid = null;
	
	
	String base = null;
	String url = null;
	String user = null;
	String pw = null;
	
	
	
	
    
    protected void initConnection(String a_base) throws Exception {
        try {
            Class.forName ("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        if(ip == null && suffixe == null && sid == null)
        {
        	ip = conf.getConfig("connexion.properties","ip");
        	sid = conf.getConfig("connexion.properties", "sid");
	    	suffixe = conf.getConfig("connexion.properties","suffixe");
        }
           
        base = a_base;
    	
    	url = "jdbc:oracle:thin:@" + ip + ":1521" + ":" + sid;
    	user = "sheil" + base + suffixe;
    	pw = "pw";
        
        
        
	    try {    	
  	
	    	conn = DriverManager.getConnection(url, user, pw);	

	    } catch (SQLException e1) {
	        // TODO Auto-generated catch block
//	        e1.printStackTrace();
	        JOptionPane.showMessageDialog(Connexion.panneau, "La connexion à la base de données a échouée", "Connexion BdD", JOptionPane.ERROR_MESSAGE);
	        ip = conf.getConfig("connexion.properties","ip");
	        Connexion.ip.setText(ip);
	    	sid = conf.getConfig("connexion.properties","sid");
	    	Connexion.sid.setText(sid);
	    	suffixe = conf.getConfig("connexion.properties","suffixe");
	    	Connexion.suffixe.setText(suffixe);
	    }        
    }




et pour la stacktrace,

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at com.pia.west.tools.grilledetauxIHM.Bd.initConnection(Bd.java:50)
        at com.pia.west.tools.grilledetauxIHM.Bd.<init>(Bd.java:25)
        at com.pia.west.tools.grilledetauxIHM.InterfaceGrilleDetaux.DerniereModi
f(InterfaceGrilleDetaux.java:791)
        at com.pia.west.tools.grilledetauxIHM.InterfaceGrilleDetaux.<init>(Inter
faceGrilleDetaux.java:117)
        at com.pia.west.tools.grilledetauxIHM.InterfaceGrilleDetaux.main(Interfa
ceGrilleDetaux.java:1418)

E:\Documents and Settings\sheil\Bureau\connexion.propertiesffffffffffffff
fffffffffffff

Exception in thread "main" java.io.FileNotFoundException: connexion.propert
ies (Le chemin d'accÞs spÚcifiÚ est introuvable)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at com.pia.west.tools.grilledetauxIHM.Configuration.getConfig(Configurat
ion.java:38)
        at com.pia.west.tools.grilledetauxIHM.Bd.initConnection(Bd.java:57)
        at com.pia.west.tools.grilledetauxIHM.Bd.<init>(Bd.java:25)
        at com.pia.west.tools.grilledetauxIHM.InterfaceGrilleDetaux.DerniereModi
f(InterfaceGrilleDetaux.java:791)
        at com.pia.west.tools.grilledetauxIHM.InterfaceGrilleDetaux.<init>(Inter
faceGrilleDetaux.java:117)
        at com.pia.west.tools.grilledetauxIHM.InterfaceGrilleDetaux.main(Interfa
ceGrilleDetaux.java:1418)


je viens aussi de constater que même si j'arrive à mettre tout ce dont j'ai besoin dans mon jar, avant de l'exécuter, je devrais d'abord extraire ce dont j'ai besoin. ce n'est que comme ça que mon jar arrive à fonctionner. Das le stacktrace, on dit que la connexion n'est pas possible et q'on ne trouve pas le fichier properties. si tu arrive à trouver une autre méthode,....
Répondre à sheila

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sandul, le vendredi 20 juin 2008 à 15:40:48
Bon, OK.

Il y a 2 erreurs dans ton stack trace. La première, ClassNotFound est exclusivement liée à cette ligne:
 Class.forName ("oracle.jdbc.driver.OracleDriver");


==> solution: renseigne correctement ton classpath dans le jar en pointant vers classes12.jar (avec le bon chemin, s'il n'est pas déployé dans le même répertoire que le fichier jar contenant le manifest dont on parle)

- Par ailleurs, pourquoi utiliser classes12 et ne pas utiliser les nouveaux drivers bien plus performants (disponibles sur le site d'Oracle)?
- De mémoire, encore, classes12 venait était dispo sous un format zip, l'astuce était de le renommer en .jar, sinon même s'il figurait dans le classpath (avec l'extension zip), il n'était pas pris en compte. Mais je vois qu'il est en .jar dans ton classpath du manifest ==> vérifier que sur le disque il est également en .jar et pas .zip.
- Vérifier également qu'il est au même endroit que ton jar avec le manifest (sinon modifie le classpath dans le manifest).
- Finalement, modifie la partie classpath de ton jar de la manière suivante:
avant
Class-Path: classes12.jar

après
Class-Path: . classes12.jar 


La 2ème erreur concerne la localisation du fichier .properties. Je te conseille les étapes suivantes:
- sous Eclipse, crée un folder (pas un package), disons props
- déplace le fichier .properties dans le répertoire props
- modifie ton code de lecture du fichier comme je te l'ai montré au post n° 3
- teste si c'est OK sous Eclipse
- lorsque tu construis ton jar, n'oublie pas de rajouter le répertoire props
- teste si c'est OK en dehors d'Eclipse

Une fois que ça marche, si ton code a pour destin autre chose qu'être du jetable pour l'apprentissage, pense à:
- le nettoyer (finally pour les ressources, pas de code dupliqué, élimination des commentaires et des System.out inutiles etc)
- changer de drivers (plus de classes12!)
- éventuellement: utiliser un DataSource, gérer des pools de connexion etc.

++ (tu me dois 3 bières :-p)
Répondre à sandul

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sheila, le vendredi 20 juin 2008 à 15:54:57
Encore, merci bcp pour ta disponibilité. (tu as mérité 3 bières + 1)

j'ai créé ce repertoire de propriétés ds lequel j'ai mis mon fichier properties. une fois de plus, tout marche sous éclipse. en exportant le tout, je fais bien attention de rien oublier (j'y joins tout ce dont j'ai besoin, y compris le répertoire lib dans lequel se trouvent mes biblio .jar parmi lesquelles classe12.jar). à l'exécution, comme tu as vu sur l'affichage du System.out...... il cherche ce fichier de connexion à partir du répertoire de travail (d'où j'ai lancé l'appication). pour résoudre tout ceci, après avoir exporté mon jar, je fais une extraction de ce dont j'ai besoin vers le répertoire de travail et tout marche nickel. Je pense que l'application va chercher tous les fichiers dont elle a besoin dans le répertoire de lancement. c'est tout à fait ce que je voulais, mais, bon....


merci encore.

à+!
Répondre à sheila

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 sandul, le vendredi 20 juin 2008 à 16:00:01
Mais bien sûr, il ne faut pas inclure classes12.jar dans ton jar (jamais des jars dans des jars, en fait). Essaie donc d'y inclure uniquement
- tes .class à toi
- les .properties
- les images

Les bibliothèques (comme classes12.jar) sont à déployer en même temps que ton jar, mais pas à son intérieur.

Ciao
Répondre à sandul

Résultats pour exécutable .jar

Execution d'un jar (Résolu) bonjour, je viens de créer un jar en suivant le tutorial de sun. j'ai bien un fichier .jar qui s'est creé. mais lorsque je double clic dessus pour l'executer, un message d'erreur apparait : failed to load Main-Class manifest... www.commentcamarche.net/forum/affich-1354480-execution-d-un-jar
Probleme pour executer sur devc++ (Résolu) Bonjour, Je apprend a programer en c et avant j'aver windows xp pui jarriver a executer et a compiler avec devc++ puis depuis que jai changer de systeme d'exploitation je suis sur vista mintenan et depuis que jai vista impossible de compiler... www.commentcamarche.net/forum/affich-7214562-probleme-pour-executer-sur-devc
Copie executable impossible a partir de CD (Résolu) Bonjour Il m'est impossible de copier un executable (.exe, .jar ) a partir d'un lecteur de CD sur le disque dur : le PC reboote pendant la copie et le fichier fait 0 Ko Merci d'avance de votre aide Windows 98 AMD 350 A+ Daniel www.commentcamarche.net/forum/affich-578888-copie-executable-impossible-a-partir-de-cd

Résultats pour exécutable .jar

Désactiver l'exécution de certains programmes au démarrageDésactiver l'exécution de certains programmes au démarrage - Windows 98/Me/2000/XP/Vista Avec msconfig Avec Winpatrol Remarques Lorsque vous installez des logiciels, certains s'exécutent à chaque démarrage de votre ordinateur.... www.commentcamarche.net/faq/sujet-6816-desactiver-l-execution-de-certains-programmes-au-demarrage
Exécuter un script shellExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,... www.commentcamarche.net/faq/sujet-4627-executer-un-script-shell
[XP SP2] Prévention de l'Exécution des DonnéesParamétrer ou désactiver la Prévention d'Exécution des Données (PED) La mise à jour SP2 de Windows XP active une nouvelle gestion de la mémoire (mode No eXecute), qui permet aux processeurs Athlon 64 d'AMD de protéger le système contre des attaques... www.commentcamarche.net/faq/sujet-3011-xp-sp2-prevention-de-l-execution-des-donnees

Résultats pour exécutable .jar

Copie executable impossible a partir de CD (Résolu)Bonjour Il m'est impossible de copier un executable (.exe, .jar ) a partir d'un lecteur de CD sur le disque dur : le PC reboote pendant la copie et le fichier fait 0 Ko Probleme virus ou autre J'ai passé AdAware Spyboot et CWShredder et... www.commentcamarche.net/forum/affich-578955-copie-executable-impossible-a-partir-de-cd
Fichier .jar (Résolu)Bonjour, ca veut dire quoi une fichier .jar et comment l'executer , j'ai remplacer l'extension en .rar et je l'ai decompressé ms je trouve seulement des fichier à extension .class merci d'avance www.commentcamarche.net/forum/affich-7044573-fichier-jar
[JAVA] probleme driver MySQL avec netbeans (Résolu)Bonjour, je developpe un programe en Java qui permet d'executer une requete MySQL, j'utilise netbeans pour programer et compiler. j'ai copier "mysql-connector-java-5.0.5-bin.jar" dans "C:\Program Files\Java\jre1.6.0\lib\ext" mais quand... www.commentcamarche.net/forum/affich-2933506-java-probleme-driver-mysql-avec-netbeans

Résultats pour exécutable .jar

Télécharger Jargon Informatique L'informatique est omniprésente dans notre vie quotidienne et elle possède son jargon bien à elle. Jargon Informatique est un dictionnaire des différents termes utilisés en informatique. Il est très fourni puisqu'il contient pas moins de 10.000 mots.... www.commentcamarche.net/telecharger/telecharger-34055740-jargon-informatique
Télécharger JarteSi vous trouvez que Microsoft Word est trop lourd ou trop encombrant pour votre machine, utilisez "Jarte". Jarte est un éditeur de texte basé sur le moteur de Microsoft WordPad de Windows. Il démarre au quart de tour, de plus il ne nécessite aucune... www.commentcamarche.net/telecharger/telecharger-34056476-jarte

Résultats pour exécutable .jar

La maison et le jardin à l'honneur à Rennes(Paris - Relax news) - Le Parc des Expositions de Rennes accueillera, du 17 au 20 octobre prochains, la quatrième édition du Salon "Esprit Maison - Esprit Jardin", rendez-vous incontournable du grand Ouest. Plus de 250 exposants s'y réuniront pour... www.commentcamarche.net/actualites/la-maison-et-le-jardin-a-l-honneur-a-rennes-5847184-actualite.php3

Résultats pour exécutable .jar

Le jargon des chatteursLe jargon des chatteurs Etant donné la nature écrite de la discussion dans un chat et le besoin d'une certaine rapidité dans les échanges, les chatteurs utilisent souvent des abréviations. Voici ci-dessous une liste des abréviations les plus... www.commentcamarche.net/contents/www/jargon.php3
Exécution de requêtes avec JDBCExécution d'une requête SQL Pour exécuter une requête SQL, il s'agit dans un premier temps de créer un objet Statement, pouvant être obtenu à partir de l'objet Connection. Un objet ResultSet permettra de récupérer les données en provenance de... www.commentcamarche.net/contents/jdbc/jdbcexec.php3