Classes "vues" par javac mais compilation impossible - Java - Programmation
Marsh Posté le 17-12-2009 à 00:58:24
Peux tu donner un exemple de nom de package dans un fichier source?
Marsh Posté le 17-12-2009 à 01:25:34
J'ai par exemple le fichier source IManagementRequestParser.java, dont le package est pictiona2ry.protocol.interfaces.
Il contient bien entendu
Code :
|
en première ligne et est situé dans le dossier src/pictiona2ry/protocol/interfaces.
Son implémentation, ManagementRequestParser.java, est dans le package pictiona2ry.protocol.impl avec la déclaration dans le code source et le répertoire qui vont bien.
Et si IManagementRequestParser.java déclare une méthode parse() (que ManagementRequestParser.java implémente bien entendu, avec une annotation @Override), alors j'ai une erreur du type :
The method parse() must override a superclass method.
J'ai pourtant bien précisé implements IManagementRequestParser.
D'ailleurs Eclipse ne trouve rien à redire à mon code et l'exécute parfaitement.
Marsh Posté le 17-12-2009 à 02:54:17
ReplyMarsh Posté le 17-12-2009 à 15:01:34
souk a écrit : enleve le @Override, la tu n'overrides pas de methode, tu implementes |
Le @Override sur une méthode implémentant une interface fonctionne avec Java 1.6...mais pas avec Java 1.5 !
Et c'est tout là mon problème.
En effet j'arrive à compiler en ligne de commande avec la commande suivante :
Code :
|
J'ai donc modifié mon fichier build.xml de la façon suivante :
Code :
|
mais j'obtiens alors l'erreur suivante :
Code :
|
Je lui demande pourtant de compiler en 1.6, non ?
Pourquoi l'erreur fait-elle référence à un source level 1.5 ?
Marsh Posté le 17-12-2009 à 19:18:55
Si tu mets l'annotation @override sur une méthode que tu n'overrides pas, le compilateur génère une erreur. Donc, vire cette annotation et tout ira bien!
Plus d'infos dans la doc:
http://java.sun.com/javase/7/docs/ [...] rride.html
Edit: Mea culpa, la documentation dit "override or IMPLEMENT a method declared in a supertype" donc à priori tu as raison, pour une implémentation ça fonctionne aussi depuis 1.6. Mais franchement je te déconseille d'utiliser cette annotation si tu ne fais qu'implémenter une méthode, déjà rien que le nom "override" induit en erreur.
Marsh Posté le 17-12-2009 à 21:44:33
Le problème est résolu, mais pas de la façon dont je l'aurais souhaité.
Il s'avère que ant utilise (sur ma machine en tout cas) le compilateur Java 1.5.
Impossible donc d'utiliser @Override sur les méthodes implémentant une interface.
J'ai donc enlevé les @Override qui posaient problème.
J'en ai profité pour mettre le "Compliance level" d'Eclipse à 1.5.
De cette façon Eclipse détecte les mêmes erreurs que le compilateur de ant.
Marsh Posté le 18-12-2009 à 13:44:22
C'est une machine Windows? Mac?
Tu utilises le Ant intégré à Eclipse ou un autre?
Peut-être que le JRE par défaut sur ta machine est un JRE 1.5
Marsh Posté le 19-12-2009 à 16:27:06
cbeyls a écrit : C'est une machine Windows? Mac? |
C'est une machine sous Fedora.
Je lance Ant directement depuis le terminal, donc pas celui intégré à Eclipse.
Il y a en effet plusieurs JRE/JDK installés.
brisssou a écrit : un p'tit coup de javac -version t'en dira plus |
Voici le résultat de quelques commandes lancées dans un terminal :
Code :
|
La résultat du javac -version me surprend quelque peu. C'est donc le compilateur intégré à Eclipse qui prend en charge la compilation ?
Marsh Posté le 17-12-2009 à 00:15:09
Bonjour à tous,
J'ai dans mon projet Java plusieurs packages.
Au niveau des répertoires présents sur le disques dur, cela donne :
J'aimerais compiler le projet avec un fichier ant.
J'utilise l'instruction suivante dans build.xml
build.xml est bien entendu dans le répertoire parent de src/.
Lorsque je lance ant, je reçois le message :
[javac] Compiling 25 sources files to chemin/vers/bin
Je pense donc que le compilateur voit tous mes fichiers (puisqu'il m'en indique 25).
Mais la compilation ne fonctionne pas.
J'ai par exemple des erreurs "The method xxx must override a superclass method".
J'en conclus que le compilateur n'arrive pas à accéder aux différentes classes. Ce qui contredis le message ci-dessus.
Si vous pouviez m'éclairer quant à la marche à suivre.