Bonjour,
Je suis en train de porter des applications Java qui tournaient sous Windows sur un MAC OSX (Capitan). Il semble que Java ne trouve pas la classe "Driver" qui pourtant se trouve dans mysql-connector-java-5.0.4-bin.jar.
Ce fichier jar se trouve dans le répertoire /gege/jars avec tous les jar communs à mes applications. Dans mes premiers essais je ne l'avais pas explicitement ajouté dans ma commande qui était comme suit :
java -splash:SPlash.jpg -cp /gege/jars/*:cinephil.jar cinephil.Accueil CONFIG=config.properties
puis ensuite j'ai lancé en"hard codant" le nom du jar :
java -splash:SPlash.jpg -cp /gege/jars/*:/gege/jars/mysql-connector-java-5.0.4-bin.jar:cinephil.jar cinephil.Accueil CONFIG=config.properties
mais j'obtiens le même résultat.
C'est à dire que l'image splash s'affiche correctement puis j'obtiens les messages qui suivent. Je subodore un problème de définition du classpath, mais comme je suis novice pour ce qui concerne OSX, je ne vois pas très bien. Vous trouverez également ci-dessous la partie du code Java dans lequel j'ai ajouté des traces pour les différentes étapes.
macbook-pro-de-gerard:cinephil gerardmartinelli$ java -splash:SPlash.jpg -cp /gege/jars/*:/gege/jars/mysql-connector-java-5.0.4-bin.jar:cinephil.jar cinephil.Accueil CONFIG=config.properties
Recherche dans le fichier jar
Configuration trouvée dans le fichier jar
On charge le fichier de config
fichier de config trouvé
url=jdbc:mysql://localhost/Cinephil?zeroDateTimeBehavior=convertToNull
driver=com.mysql.jdbc.Driver
admin=gege
pw=
splash=5000
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at cinephil.Common.creationConnexion(Common.java:285)
at cinephil.Accueil.<init>(Accueil.java:279)
at cinephil.Accueil.main(Accueil.java:3621)
Fichier d'initialisation non trouvé
Voici la partie du code en question. Merci d'avance pour votre aide.
Gégé
Le fichier de config est le suivant :
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public static java.sql.Connection creationConnexion( ) { String admin = "", pw = "", url = "", driver = "" ; java.sql.Connection cnx = null; try { if (userdir.indexOf("eclipse")< 0 ) // pas de vérification de JAR si l'on tourne sous eclipse. { System.out.println("Recherche dans le fichier jar " ); JarFile jar = new JarFile("cinephil.jar"); JarEntry entry = jar.getJarEntry("cinephil/"+configFile); jar.close(); if (entry == null) return null; System.out.println("Configuration trouvée dans le fichier jar " ); } java.util.Properties prop = new java.util.Properties(); System.out.println("On charge le fichier de config" ); prop.load(Common.class.getResourceAsStream("/cinephil/"+configFile)); System.out.println(" fichier de config trouvé" ); url = ((String) prop.getProperty("URL")).trim(); // on retrouve l'URL System.out.println("url=" +url ); driver = ((String) prop.getProperty("DRIVER")).trim(); // on retrouve le driver System.out.println("driver=" +driver ); admin = ((String) prop.getProperty("ADMIN")).trim(); // on retrouve l'administrateur System.out.println("admin=" +admin); pw = ((String) prop.getProperty("PASSW")).trim(); // on retrouve le mot de passe System.out.println("pw=" +pw); splash = ((String) prop.getProperty("SPLASHTIME","5000")).trim(); // temps du splash System.out.println("splash=" +splash); // on charge le driver de base de données" ; Class.forName (driver).newInstance(); System.out.println("Claas.forname OK"); // On réalise une connexion à la source de données sans mot de passe cnx = java.sql.DriverManager.getConnection(url,admin,pw ); if (cnx==null) System.out.println("Connexion à la base impossible" ); return cnx; } catch (Exception e) {e.printStackTrace();System.exit(0); } return null;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DRIVER = com.mysql.jdbc.Driver URL = jdbc:mysql://localhost/Cinephil?zeroDateTimeBehavior=convertToNull ADMIN = gege PASSW * Temps d'affichage du splash en millisecondes SPLASHTIME = 5000
Partager