Lorsque des plugins Eclipse se marchent dessus ...

… ca énerve.

C’est en voulant dérouler le très prometteur blog de Ben Corrie sur le déploiement d’une appli GWT sur SpringSource dm Server que je suis tombé hier sur un bug de mon environnement Eclipse qui m’a bloqué dès la première étape.

En effet, un simple export de plugin échouait lamentablement sur une NullPointerException :

!ENTRY org.eclipse.ant.core 4 1 2008-12-15 22:34:29.359 !MESSAGE BUILD FAILED !STACK 0 java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:394) at org.apache.tools.ant.PropertyHelper.setUserProperty(PropertyHelper.java:379) at org.apache.tools.ant.Project.setUserProperty(Project.java:537) at org.eclipse.ant.internal.core.ant.InternalAntRunner.setProperties(InternalAntRunner.java:233) at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:554) at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:456) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.ant.core.AntRunner.run(AntRunner.java:378) at org.eclipse.pde.internal.core.exports.FeatureExportOperation.runScript(FeatureExportOperation.java:355) at org.eclipse.pde.internal.core.exports.FeatureExportOperation.doExport(FeatureExportOperation.java:236) at org.eclipse.pde.internal.core.exports.FeatureBasedExportOperation.run(FeatureBasedExportOperation.java:46) at org.eclipse.pde.internal.ui.build.FeatureExportJob.run(FeatureExportJob.java:55) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

( extrait de /.metadata/.log )

Relativement agacé par ce blocage, j’ai entrepris de trouver la cause du problème… Heureusement pour moi, il n’a pas été si compliqué de la trouver.

En quelques mots, j’ai :

  • créé une nouvelle "Eclipse Application" dans "Run Configurations", sans oublier de spécifier qq arguments mémoires qui vont bien : j’ai utilisé -Xms40m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m
  • lancé cette application en mode debug => ce qui forke un nouvel Eclipse
  • spécifié des break points sur org.eclipse.pde.internal.core.exports.FeatureExportOperation inclus dans le jar org.eclipse.pde.core_3.4.0.v20080903-1700.jar
  • et entrepris de comprendre la cause du problème.

( Tout ça bien sûr en ayant tout d’abord étudier un peu le code de cette classe. Je suis feignant : je n’ai pas cherché les sources, j’ai décompilé rapidement le code du jar avec l’excellent décompilateur de Emmanuel : JD-GUI )

La cause de mon problème était la présence d’une clef WEBLOGIC_HOME ayant une valeur null dans les propriétés envoyées à Ant…
En cherchant un peu plus, j’ai trouvé dans les préférences de mon workspace Eclipse dans la rubrique Ant > Runtime > Properties que ce très cher plugin Weblogic pour Eclipse définissait automatiquement une propriété WEBLOGIC_HOME, qu’il renseigne à partir de la configuration Weblogic à définir dans Server > Runtime Environments.
 
Oui mais voila dans mon workspace dédié à SpringSource dm Server, je n’avais pas configuré un tel environnement … Ce qui causait le problème.

Comme quoi, avoir plusieurs workspaces Eclipse n’est pas toujours une bonne idée…

Author image
Fort de plus de 20 ans d'expérience autour de l'écosystème JavaEE, Fabien accompagne ses clients dans la conception et le cadrage de leurs projets.