Comment compiler CoeL avec GWT

Collections en Ligne est écrit en GWT (Java). Chaque modification nécessite de le recompiler; voici les prérequis et la procédure.

Prérequis

Paquets

  • Java >= 8 : j'utilise le paquet Ubuntu oracle-java8-installer mais openjdk-8-jdk fonctionne
  • ant (outil similaire Ă  Make)

Bibliothèques GWT et consorts

Créer un dossier quelque part sur sa machine et y placer les bibliothèques suivantes, que l'on trouvera sur Internet ou sur le PC d'un collègue.
Les versions sont données à titre indicatif (Mathias, 2017-08). Ça devrait marcher avec les suivantes mais c'est pas garanti.

GWT


GXT

GXT a été racheté par Sencha : https://www.sencha.com/products/gxt
Je n'ai pas essayé de compiler CoeL avec Sencha; voici la version que j'utilise :

GWT-Maps


Optionnel : plugin pour Eclipse

http://www.gwtproject.org/download.html

Compilation

Le fichier build.xml de base n'a jamais marché avec moi, même en remplissant le build.properties correctement. J'ai du écrire un nouveau buildfile (non versionné), dans lequel j'ai mentionné les chemins des bibliothèques GWT, GXT et GWT-Maps (voir ci-dessous).

Préparer un buildfile

Exemple du fichier buildMathias.xml :
<project name="coel" xmlns:artifact="urn:maven-artifact-ant" basedir=".">

  <property file="build.properties"/>
  <property name="gxtdestdir" value="src/org/tela_botanica/public"/>
  <property name="confparams" value=""/>

  <path id="gwt">
    <fileset includes="*.jar" dir="${user.home}/Applications/sdk/gwt"/>
    <fileset includes="*.jar" dir="${user.home}/Applications/sdk/gwt-maps-1.1.1"/>
    <fileset includes="gxt-2.3.1-gwt22.jar" dir="${user.home}/Applications/sdk/gxt"/>
    <pathelement location="src" />
  </path>

  <!-- todo: must be inside coel*.gwt.xml in some way -->
  <target name="link-resources">
    <mkdir dir="${gxtdestdir}"/>
    <!-- doit lier "resources" dans upstream Ă  src/org/.../public/gxt -->
    <symlink overwrite="true" link="${gxtdestdir}/gxt" resource="${gxtresdir}"/>
  </target>


  <target name="test"><echoproperties/></target> <!-- sometimes useful -->

  <target name="compile" depends="link-resources">
    <!-- <java classname="com.google.gwt.dev.GWTCompiler" fork="true"> -->
    <java classname="com.google.gwt.dev.Compiler" fork="true">
      <arg line="-localWorkers 2 -style DETAILED ${projectName}"/>
      <!-- <arg line="-out build/gwtOutput"/> -->
      <classpath refid="gwt"/>
    </java>
    <exec resolveexecutable="true" executable="m4" input="war/config/apropos.js.m4" output="war/config/apropos.js">
      <arg line="-D _JREST_SERVICES_PATH_=jrest/services -D _SUFFIX_='${confparams}'" />
    </exec>
  </target>

  <target name="quick" depends="link-resources">
    <java classname="com.google.gwt.dev.Compiler" fork="true">
      <arg line="-style DETAILED -draftCompile ${projectTestName}" />
      <classpath refid="gwt"/>
    </java>
  </target>

</project>

Compiler


Se rendre dans le dossier racine des sources de CoeL et y taper joyeusement ceci :
ant -f monFicherDeBuild.xml compile

Pour développer, une compilation de la permutation Firefox seulement est suffisante (beaucoup plus rapide) :
ant -f monFicherDeBuild.xml quick

On doit obtenir une sortie de ce type :
Buildfile: /home/mathias/web/eflore/applications/coel/monFicherDeBuild.xml

link-resources:

quick:
     [java] Compiling module org.tela_botanica.Coel-dev
     [java]    Compiling 1 permutation
     [java]       Compiling permutation 0...
     [java]    Compile of permutations succeeded
     [java] Linking into /home/mathias/web/eflore/applications/coel/war/coel
     [java]    Link succeeded
     [java]    Compilation succeeded -- 15,086s

BUILD SUCCESSFUL
Total time: 16 seconds

Si ça ne se termine pas par BUILD SUCCESSFUL, vous l'avez dans l'os vérifier les chemins dans votre buildfile.

Lancer CoeL

Dans le dossier war/config, copier config.defaut.js en config.js, le relire vite fait et ajuster les chemins. Ne surtout pas toucher aux infâmes définitions de listes.
L'interface de CoeL peut taper dans n'importe quel service CoeL; si vous n'avez pas les services en local, utiliser api-test... et ça devrait marcher.

Se débrouiller pour que votre serveur Web serve le dossier de CoeL, et accéder au fichier war/Coel.html; ex: http://localhost/coel/war/Coel.html
Et voilĂ  !