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

Build Java Discussion :

[javac] "cannot access" sur une classe chargée


Sujet :

Build Java

  1. #1
    Membre averti
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Points : 316
    Points
    316
    Par défaut [javac] "cannot access" sur une classe chargée
    Bonjour,

    Mon but final est d'écrire un script Ant qui va compiler mon projet à partir de Jenkins. Après avoir généré mes scripts, je rencontre quelques difficultés, et j'ai petit à petit réduit la zone de recherche à un fichier qui ne veut pas compiler pour une raison que j'ignore.

    Le résultat de la compilation (cer.create renvoie un objet de type Employee) :
    Code txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-Web/src/fr/societe/myapp/web/Loader.java:40: cannot access Employee
    class file for Employee not found
                    System.out.println(cer.create(fr.societe.myapp.entities.Note.class, 42));
                                          ^

    Quelques explications sur l'erreur qui m'est retournée :
    Code txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Détail de l'erreur :
    Objet cer :
    	- Interface Locale d'un EJB quelconque. 
    	- Sa signature : <T extends Employee> T create(T t, Long uid);
    	- Dans le projet MyApp-EJBClient
    Objet Employee :
    	- Bean Entité (classe métier) situé dans le projet MyApp-EJBClient
    Objet Note :
    	- Bean entité (classe métier) situé dans le projet MyApp-EJBClient , lui est bien reconnu.


    J'en suis donc finalement venu à compiler manuellement le fichier à la main pour tenter de comprendre ce qu'il se passe.

    Tout d'abord un rapide aperçu de mon dossier de travail. Il s'agit d'un projet JEE Glassfish (Eclipse) dont le code est situé sur un serveur Jenkins.
    Code txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Projet MyApp :
    workspace/MyApp-EJBClient/build/classes
    workspace/MyApp-Common/build/classes
    workspace/MyApp-Web/build/classes
    # Pour les librairies JEE
    /opt/glassfishv3
    # Autres librairies
    workspace/Libs

    J'ai ensuite lancé la commande javac en mode verbeux pour voir ce qu'il se passe, mais je ne suis pas plus avancé. Le classpath est assez long car il doit contenir les librairies de glassfish, et de mon projet. Le plus intéressant concerne le retour renvoyé par javac. Donc en premier la commande :
    Code txt : Sélectionner tout - Visualiser dans une fenêtre à part
    if_zen@push0ut:~/.jenkins/jobs/MyApp Nightly/workspace/MyApp-Web$ javac -verbose -d /home/if_zen/.jenkins/jobs/MyApp\ Nightly/workspace/MyApp-Web/build/classes/ -classpath ...[tronque-car-trop-long] -sourcepath /home/if_zen/.jenkins/jobs/MyApp\ Nightly/workspace/MyApp-Web/src -target 1.6 -encoding Cp1252 -g -source 1.6 /home/if_zen/.jenkins/jobs/MyApp\ Nightly/workspace/MyApp-Web/src/fr/societe/myapp/web/Loader.java

    Et le résultat qui me revient :
    Code txt : 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
    46
    47
    48
    49
    50
    [parsing started /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-Web/src/fr/societe/myapp/web/Loader.java]
    [parsing completed 22ms]
    [search path for source files: /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-Web/src]
    [search path for class files:...[tronque-car-trop-long]]
    [loading javax/naming/Context.class(javax/naming:Context.class)]
    [loading javax/naming/InitialContext.class(javax/naming:InitialContext.class)]
    [loading javax/naming/NamingException.class(javax/naming:NamingException.class)]
    [loading /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-EJBClient/build/classes/fr/societe/myapp/ejb/crud/CELocal.class]
    [loading /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-EJBClient/build/classes/fr/societe/myapp/entities/Employee.class]
    [loading /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-Common/build/classes/fr/societe/myapp/util/ejb/EmployeeMgr.class]
    [loading java/lang/Object.class(java/lang:Object.class)]
    [loading java/io/Serializable.class(java/io:Serializable.class)]
    [loading java/lang/Class.class(java/lang:Class.class)]
    [loading javax/persistence/Column.class(javax/persistence:Column.class)]
    [loading javax/persistence/Temporal.class(javax/persistence:Temporal.class)]
    [loading javax/persistence/TemporalType.class(javax/persistence:TemporalType.class)]
    [loading java/lang/SuppressWarnings.class(java/lang:SuppressWarnings.class)]
    [loading java/lang/annotation/Annotation.class(java/lang/annotation:Annotation.class)]
    [loading java/lang/String.class(java/lang:String.class)]
    [loading java/lang/annotation/Target.class(java/lang/annotation:Target.class)]
    [loading java/lang/annotation/ElementType.class(java/lang/annotation:ElementType.class)]
    [loading java/lang/annotation/Retention.class(java/lang/annotation:Retention.class)]
    [loading java/lang/annotation/RetentionPolicy.class(java/lang/annotation:RetentionPolicy.class)]
    [checking fr.societe.myapp.web.Loader]
    [loading java/lang/Long.class(java/lang:Long.class)]
    [loading java/lang/Number.class(java/lang:Number.class)]
    [loading java/util/List.class(java/util:List.class)]
    [loading java/lang/System.class(java/lang:System.class)]
    [loading java/io/PrintStream.class(java/io:PrintStream.class)]
    [loading java/io/FilterOutputStream.class(java/io:FilterOutputStream.class)]
    [loading java/io/OutputStream.class(java/io:OutputStream.class)]
    [loading /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-EJBClient/build/classes/fr/societe/myapp/entities/Note.class]
    [loading javax/persistence/Table.class(javax/persistence:Table.class)]
    [loading javax/persistence/NamedQueries.class(javax/persistence:NamedQueries.class)]
    [loading javax/persistence/NamedQuery.class(javax/persistence:NamedQuery.class)]
    [loading javax/persistence/TableGenerator.class(javax/persistence:TableGenerator.class)]
    [loading javax/persistence/GeneratedValue.class(javax/persistence:GeneratedValue.class)]
    [loading javax/persistence/GenerationType.class(javax/persistence:GenerationType.class)]
    [loading javax/persistence/LockModeType.class(javax/persistence:LockModeType.class)]
    /home/if_zen/.jenkins/jobs/MyApp Nightly/workspace/MyApp-Web/src/fr/societe/myapp/web/Loader.java:40: cannot access Employee
    class file for Employee not found
                    System.out.println(cer.create(fr.societe.myapp.entities.Note.class, 42));
                                          ^
    [loading java/lang/Exception.class(java/lang:Exception.class)]
    [loading java/lang/Throwable.class(java/lang:Throwable.class)]
    [loading javax/naming/Name.class(javax/naming:Name.class)]
    [loading java/lang/Comparable.class(java/lang:Comparable.class)]
    [loading java/lang/CharSequence.class(java/lang:CharSequence.class)]
    [total 869ms]
    1 error

    Voilà. Il me charge bien ma classe Employee, et les autres classes du même projet "Client", mais il ne veut pas me compiler ma classe malgré tout. Je n'y comprends rien.

    J'espère que mon message est compréhensible et qu'il vous inspirera.

    Merci beaucoup par avance.

  2. #2
    Membre averti
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Points : 316
    Points
    316
    Par défaut
    Un point intéressant à noter :

    Si je copie mon interface d'EJB vers une nouvelle, que je la compile, et que j'appelle celle-ci depuis mon projet Web, la compilation a l'air de bien se passer....

    Copie de CELocal vers CELocal2 (interface sans implémentation concrète), et mise à jour de Loader.java pour utiliser CELocal2 au lieu de CELocal.

    Soit c'est vraiment bizarre, soit c'est tellement énorme que je vois rien...

Discussions similaires

  1. [C++] pointeur sur une classe
    Par PH69 dans le forum Débuter
    Réponses: 1
    Dernier message: 21/11/2005, 22h08
  2. Création dynamique de méthode sur une classe ?
    Par elitost dans le forum Général Java
    Réponses: 9
    Dernier message: 18/10/2005, 14h47
  3. Réponses: 14
    Dernier message: 14/03/2005, 09h16
  4. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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