Classes "vues" par javac mais compilation impossible

Classes "vues" par javac mais compilation impossible - Java - Programmation

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 :

Code :
  1. src/
  2.   nomProjet/
  3.     package1/
  4.       interfaces/
  5.         fichiers .java
  6.       implem/
  7.         fichiers .java
  8.     package2/
  9.       interfaces/
  10.         fichiers .java
  11.       implem/
  12.         fichiers .java


 
J'aimerais compiler le projet avec un fichier ant.
 
J'utilise l'instruction suivante dans build.xml

Code :
  1. <javac
  2.   srcdir="src"
  3.   destdir="bin"
  4.   source="1.5"
  5.   target="1.5"
  6. />


 
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.

Reply

Marsh Posté le 17-12-2009 à 00:15:09   

Reply

Marsh Posté le 17-12-2009 à 00:58:24    

Peux tu donner un exemple de nom de package dans un fichier source?

Reply

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 :
  1. package pictiona2ry.protocol.interfaces;


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.


Message édité par scaven13 le 17-12-2009 à 01:31:56
Reply

Marsh Posté le 17-12-2009 à 02:54:17    

enleve le @Override, la tu n'overrides pas de methode, tu implementes [:dawao]

Reply

Marsh Posté le 17-12-2009 à 15:01:34    

souk a écrit :

enleve le @Override, la tu n'overrides pas de methode, tu implementes [:dawao]


 
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 :
  1. javac -d bin/ -source 1.6 -target 1.6 src/


 
J'ai donc modifié mon fichier build.xml de la façon suivante :

Code :
  1. <javac
  2.   srcdir="src"
  3.   destdir="bin"
  4.   source="1.6"
  5.   target="1.6"
  6. />


 
mais j'obtiens alors l'erreur suivante :

Code :
  1. [javac] Compliance level '1.5' is incompatible with source level '1.6'. A compliance level '1.6' or better is required


 
Je lui demande pourtant de compiler en 1.6, non ?
Pourquoi l'erreur fait-elle référence à un source level 1.5 ?

Reply

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.


Message édité par cbeyls le 17-12-2009 à 20:02:31
Reply

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.


Message édité par scaven13 le 17-12-2009 à 21:45:09
Reply

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

Reply

Marsh Posté le 18-12-2009 à 15:13:46    

un p'tit coup de javac -version t'en dira plus


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 19-12-2009 à 16:27:06    

cbeyls a écrit :

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


 
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 :
  1. java -version
  2. java version "1.6.0_0"
  3. OpenJDK Runtime Environment (IcedTea6 1.6) (fedora-30.b16.fc11-i386)
  4. OpenJDK Client VM (build 14.0-b16, mixed mode)
  5. javac -version
  6. Eclipse Java Compiler 0.894_R34x, 3.4.2 release, Copyright IBM Corp 2000, 2008
  7. ant -version
  8. Apache Ant version 1.7.1 compiled on February 23 2009


 
La résultat du javac -version me surprend quelque peu. C'est donc le compilateur intégré à Eclipse qui prend en charge la compilation ?

Reply

Sujets relatifs:

Leave a Replay

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