GWT (2.0) projekt felállítása maven2-vel és m2eclipse-szel

Célok:
  1. pom.xml -ben kelljen csak leírni a projekt függőségeit (ne eclipse függően a .classpath fájlban)
  2. forduljon le a projekt eclipse-ben (m2eclipse-ben igazából)
  3. forduljon le a projekt parancssori maven-nel
  4. indítható legyen a projekt eclipse-ből (m2eclipse-ben igazából)
  5. debugolható legyen a projekt eclipse-ben, de ne remote debugging módon (tehát ne egy debug porton csatlakozva az alkalmazáshoz), hanem rendesen
  6. ne keveredjenek a generált dolgok (itt most a maven által fordítás közben generált dolgokra gondolok) a kézzel létrehozottakkal, hogy könnyen lehessen a verziókövetést (pl. svn) kezelni
  7. kliensoldali módosításokhoz ne kelljen újraindítani a szervert
  8. multiprojekt kezelése m2eclipse-ben működjön: azaz, ha a Workspace Resolution be van kapcsolva, akkor ne jar-ból szedje a projektet, hanem workspace-ből
Ami kell:
  1. J2EE-s eclipse (én a Galileo-t használom)
  2. m2eclipse plugin: nagyjából mindegy, hogy melyik verzió, én jelenleg a 0.10.0.20100209-0800 -t használom
  3. Google Plugin for Eclipse (továbbiakban GEP) : 1.3.1 fölötti kell, én az 1.3.2-eset használom



Projekt felállítása:
  1. jobb gomb package v. project explorerben -> New... -> Dynamic Web Project (!! tehát nem maven-es archetypeból építkezünk m2eclipse-es projektlayouttal)



  2. a Java oldalon be kell allitani a hagyományos maven-es forráskönyvtárakat (src/main/java, src/main/resources, ...) és a default output foldert target/classes-ra kell állítani átmenetileg


  3. Web Module oldalon a Content directory src/main/webapp legyen


  4. Finish után ezt kell látni:


  5. Project properties-ben (jobb gomb a projekten -> Properties) Google -> Web Toolkit -> Use Google Web Toolkit pipa be (ezzel gyakorlatilag beizzítottuk a Google Eclipse Plugint)


  6. Ugyanitt Google -> Web Application -> "This project has a WAR directory"-nál a pipa be + WAR directory: src/main/webapp + "Launch and deploy from this directory" pipa KI (!!)


    Ez a pont az, ami miatt a Google Eclipse Plugin 1.3.1 fölötti verziója kell (amit mellesleg nemrég, 2010. márc. végén adtak ki), ugyanis korábban ez a képernyő nem létezett a pluginban, így a WAR alapját képző forráskönyvtár nem lehetett maven-es layoutban. A "Launch and deploy from this directory"-t azért kell kivenni, mert mi maven-nel a target alá fogjuk elkészíteni a war folder-t (a lefordított class-okkal, meg a belemásolt lib-ekkel), és onnan akarjuk majd indítani a projektet. Lásd később.
  7. Kezdjünk neki a maven-esítésnek. Dobjunk be egy pom.xml-t a projekt könyvtárba. Pl.:



    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    4.0.0
    hu.jbuzi
    gwt-m2eclipse
    war
    1.0.0

    2.0.2
    1.6
    1.6



    com.google.gwt
    gwt-servlet
    ${gwt.version}
    runtime


    com.google.gwt
    gwt-user
    ${gwt.version}
    provided




    junit
    junit
    4.7
    test




  8. Jobb gomb a projekten -> Maven -> Enable Dependency Management
  9. Jobb gomb a projekten -> Maven -> Update project configuration
  10. Csak azért, hogy tesztelhessük az eredményt, csináljuk gyorsan egy sima új (Google) Web Application Project-et, amibe a GEP beleteszi a példa Greetings applikáció fájljait
  11. Másoljuk be a fájlokat (*.java, web.xml, *.css és *.html fájlokat is) a mi projektünkbe. Köv. pont után mutatok egy project layout-ot.
  12. Ha vannak TOMCAT lib-ek a classpathunkon (ezek nem feltétlen kellenek), akkor cseréljük meg a GWT SDK és a TOMCAT libek sorrendjét, tehát a GWT SDK legyen feljebb.


  13. Futtassunk egy "mvn clean package" -t a projektre, amihez felvehetjük az m2eclipse-ben a következő Run configurationt:


  14. Elkészült a gwt-m2eclipse/target/gwt-m2eclipse-1.0.0 könyvtár, amibe belepillantva látható, hogy minden bennevan, ami egy webes projekthez kell, viszont semmi gwt-s dolgot nem tartalmaz. Hogyan is tartalmazhatna, hiszen mavent futtattunk rajta, gwt plugin/fordító parancsok nélkül. Tehát futtassuk le a GEP-os fordítást: jobb klikk a projekten -> Google -> Compile és a "WAR Directory Selection" képernyőn válasszuk ki a project-name/target/project-name-x.x.x könyvtárat, tehát nálam ez a gwt-m2eclipse/target/gwt-m2eclipse-1.0.0.
  15. Indíthatjuk a projektet: jobb klikk -> Run as... -> Web Application. Első alkalommal ki kell választanunk a WAR folder-t, tehát megint ugyanazt, mint fordításnál: project-name/target/project-name-x.x.x könyvtárat, tehát nálam ez a gwt-m2eclipse/target/gwt-m2eclipse-1.0.0

    Hol tartunk?A célok közül az 1, 2, 4, 5, és a 6, eddig teljesülni látszik (ha debuggal indítod, akkor debugolható).


  16. Nézzük, hogyan lehet csak maven-nel, GEP nélkül fordítani GWT-s projektet. Kell hozzá a gwt-maven plugin 1.2-es verziója, tegyük be a pom.xml-be a alá az alábbiakat (végén bekopizom az egész pom.xml-t is):




    org.codehaus.mojo
    gwt-maven-plugin
    1.2


    org.apache.maven.plugins
    maven-war-plugin
    2.0.2



  17. mvn clean gwt:compile package -t futtassunk rajta. Így lefordul maven-esen is (3-as cél pipa), hasznos, ha például hudsonnal automatikusan akarjuk buildeltetni.


  18. Ahhoz, hogy a kliensoldali változások azonnal életbe lépjenek, át kell állítanunk az output foldert a fordításnál (jobb klatty -> Properties -> Java Build Path menüpont alatt). Lényeg, hogy az src/main/java és src/main/resources könyvtárakból az eredmény a project-name/target/project-name-x.x.x/WEB-INF/classes generálódjon:




Tehát a célok közül az utolsón kívül az összes teljesül. Az utolsóhoz még nem találtam meg a megoldást, minden esetben jar-ba kell csomagolni a függőségeket (mvn install-t kell futtatni rájuk), hogy a classpathra kerülhessen a változás.

Végül egyben az egész pom.xml:



xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
hu.jbuzi
gwt-m2eclipse
war
1.0.0

2.0.2
1.6
1.6



com.google.gwt
gwt-servlet
${gwt.version}
runtime


com.google.gwt
gwt-user
${gwt.version}
provided




junit
junit
4.7
test





org.codehaus.mojo
gwt-maven-plugin
1.2


org.apache.maven.plugins
maven-war-plugin
2.0.2





top