IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Java Discussion :

Le compilateur eclipse ne compile pas certaines classes


Sujet :

Eclipse Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de kalysto
    Profil pro
    Développeur
    Inscrit en
    Mars 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mars 2003
    Messages : 442
    Par défaut Le compilateur eclipse ne compile pas certaines classes
    Bonjour

    Je poste ca dans le forum Eclipse, mais je ne sais pas trop si c'est le bon endroit...

    En bref, je veux utiliser le compilateur d'eclipse en dehors d'eclipse afin de compiler (jusque la tout va bien ) des sources qui sont générées au préalables.

    Au début, la compilation se passe plutot bien, les sources que je lui donne sont bien analyzées, dans les cas "simples" pas de soucis.
    Maintenant, j'ai un probleme quand le compilateur tombe sur un fichier .java qui contient plusieurs classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    package p;
    // we're in p/MyClass.java
    public class MyClass {
      private RestrictedVisibilityClass field;
    }
    class RestrictedVisibilityClass {}
    La classe MyClass est bien analyzée, et le compilateur trouve bien la référence vers RestrictedVisibilityClass, mais il ne la compile pas et me sort ces erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .../p/MyClass.java: Pb(2) RestrictedVisibilityClass cannot be resolved to a type
    .../p/MyClass.java: Pb(322) The type RestrictedVisibilityClass collides with a package
    D'ailleurs, en ajoutant quelques traces dans mes classes de glue je vois ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    findType: package: java.lang, typeName: RestrictedVisibilityClass
    isPackage: java.lang.RestrictedVisibilityClass
    La chose etrange, c'est qu'il essaye de charger ma classe à partir du package java.lang, et pas à partir de son vrai package (p) !

    Est ce que quelqu'un aurait une idée pour résoudre mon souci ? une option magique que j'aurais oubliée, ...

    Note : Plusieurs projets open source ont déjà intégré ca (Tomcat, Plexus Compiler, Jakarta commons compiler, ...) sans soucis, eux.

    Merci
    Kaly

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Euh je n'ai pas de solution mais j'ai une question : pourquoi compiler avec le compilo d'Eclipse et pas directement avec javac ? Sachant que javac est un compilateur plus sûr qu'Eclipse (j'ai eu des problèmes de compilation avec Eclipse que je n'ai pas avec mon script ant).

  3. #3
    Membre chevronné Avatar de kalysto
    Profil pro
    Développeur
    Inscrit en
    Mars 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mars 2003
    Messages : 442
    Par défaut
    En fait, l'interet principalement la performance.
    Comme le compilateur eclipse est ecrit en java, on peut le lancer directement dans la JVM. Donc pas besoin de lancer un nouveau processus (ce qui est toujours couteux).
    De plus, lancer un process implique de generer une ligne de commande pour la compilation, ce qui cause des adhérences au systeme; par exemple, sous windows, il y a des limites de tailles d'arguments, passé un certain nombre de caracteres, on a droit a un ProcessException je crois.
    Et puis dernier avantage, on limite les access fichiers (coutux aussi), en chargeant directement les classes utilisées (grosso modo le classpath de compilation) à partir d'un classloader qu'on a deja.

    Bref, c'est mieux

  4. #4
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par kalysto Voir le message
    En fait, l'interet principalement la performance.
    Comme le compilateur eclipse est ecrit en java, on peut le lancer directement dans la JVM. Donc pas besoin de lancer un nouveau processus (ce qui est toujours couteux).
    De plus, lancer un process implique de generer une ligne de commande pour la compilation, ce qui cause des adhérences au systeme; par exemple, sous windows, il y a des limites de tailles d'arguments, passé un certain nombre de caracteres, on a droit a un ProcessException je crois.
    Et puis dernier avantage, on limite les access fichiers (coutux aussi), en chargeant directement les classes utilisées (grosso modo le classpath de compilation) à partir d'un classloader qu'on a deja.

    Bref, c'est mieux
    Je ne sais pas si ça peut t'aider mais dans Java 6 a été ajoutée la Java Compiler API qui permet également de faire ce genre de chose, à savoir invoquer un compilateur Java directement dans une application Java et de récupérer toutes les informations retournées par le compilateur (erreurs, warnings, messages, etc.).

    Je te suggère de jeter un coup d'oeil à la javadoc du package javax.tools (le package de Java Compiler API) de Java 6 pour plus d'infos.

  5. #5
    Membre chevronné Avatar de kalysto
    Profil pro
    Développeur
    Inscrit en
    Mars 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mars 2003
    Messages : 442
    Par défaut
    Merci pour l'info
    Mais je suis obligé de rester en Java SE 5 :'(

  6. #6
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par kalysto Voir le message
    Merci pour l'info
    Mais je suis obligé de rester en Java SE 5 :'(
    Arff, dans ce cas cas je peux rien pour toi.

    Peut être que y'a moyen de récupérer l'API Compiler séparément et compilée pour Java 5 mais je sais pas où, désolé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Eclipse ne reconnaît pas les classes importées
    Par daydream123 dans le forum Eclipse
    Réponses: 2
    Dernier message: 24/06/2011, 09h19
  2. Réponses: 4
    Dernier message: 16/02/2007, 14h51
  3. les fichiers .class ne se compilent pas à la volé?
    Par talbi404 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 20/12/2006, 19h39
  4. [C# 2.0] Un exemple de classe générique qui ne compile pas.
    Par Pierre8r dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h11
  5. [Info]Eclipse ne permet pas de changer de compilateur
    Par albertl dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 08/02/2005, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo