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) :
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 :
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.
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 :
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 :
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.
Partager