Erreur à la compilation en utilisant driver postgresql. Classpath?

Erreur à la compilation en utilisant driver postgresql. Classpath? - Java - Programmation

Marsh Posté le 21-09-2009 à 00:45:26    

J'ai un répertoire /home/igarimasho/java_test/ qui contient un fichier Application.java:

Code :
  1. import java.sql.*;
  2. class Application {
  3. public static void main(String[] args) {
  4.  System.out.println("Hello World!" );
  5.  Class.forName("org.postgresql.Driver" );
  6. }
  7. }


 
ainsi que le fichier postgresql.jar
 
Je tente une compilation avec la commande suivante:

Code :
  1. $ javac -classpath /home/igarimasho/java_test/postgresql.jar Application.java


Et forçément le compilateur me crache à la figure:

Citation :

Application.java:6: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
                Class.forName("org.postgresql.Driver" );
                             ^
1 error


 [:maestro]  
 
Où est le problème?
 
 
EDIT: j'ai googlé, et d'autres personnes ont le même problème, mais j'ai pas la solution où du moins l'explication de la source du problème  :(
 
EDIT: issue de la doc du driver postgresl: http://jdbc.postgresql.org/documentation/84/load.html

Citation :

The forName() method can throw a ClassNotFoundException if the driver is not available.


Cool, mais mon classpath a l'air bon!
 
EDIT: bourdel, en ajoutant à mon code:

Code :
  1. System.out.println(System.getProperty("java.class.path" ));


Je vois que l'option du classpath ne passe pas correctment au compilateur. Pourquoi???  :??:
 
En fait l'output complet de l'appli est: (je suis sous Osx)

Code :
  1. Hello World!
  2. .:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/.compatibility/14compatibility.jar


Et mon postgresql.jar il est passé où?


Message édité par igarimasho le 21-09-2009 à 01:11:31
Reply

Marsh Posté le 21-09-2009 à 00:45:26   

Reply

Marsh Posté le 21-09-2009 à 03:39:57    

Plusieurs choses:
 
1) Tu dois passer ton classpath au compilateur javac ET à la JVM java à l'exécution. Ici tu ne parles que de le passer au compilateur (javac) et pourtant tu as l'air d'exécuter un programme de test (java).
2) Le compilateur ne veut pas compiler ton code parce qu'il te demande de catcher ou thrower ClassNotFoundException puisque cette exception peut être levée à l'exécution par la méthode Class.forName(). Il ne dit pas qu'il ne trouve pas postgreSQL, il dit juste que ton code doit prévoir le cas où il ne le trouve pas (je rappelle qu'on est à la compilation et pas à l'exécution). Donc ajoute un "throws ClassNotFoundException" à ta méthode ou un try { ... } catch (ClassNotFoundException e) autour du code.
 
Le mieux est d'utiliser un IDE comme Eclipse ou Netbeans pour développer et compiler, afin d'éviter ce genre d'erreur de débutant.


Message édité par cbeyls le 21-09-2009 à 03:41:13
Reply

Marsh Posté le 21-09-2009 à 08:39:12    

Le mieux serait surtout de comprendre la différence entre execution et compilation, surtout en tant que débutant.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 21-09-2009 à 09:07:10    

Merci java c'est pas mon premier langage compilé, "convention over configuration" ça ne s'applique pas qu'à Rails :jap:
 
cbeyls avait bien vu, il fallait wrapper un try...catch... mais ça le message d'erreur était pas ultra explicite pour un nouveau chez java.

Reply

Marsh Posté le 21-09-2009 à 09:13:25    

Je vois mal comment on aurait pu faire plus explicite comme message....?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed