Tvorba webových aplikací s Apache Maven Využití Mavenu pro efektivní vývoj Jety Pavel Jetenský
1. Založení nové webové aplikace 2. Vývoj webové aplikace 3. Nasazení (deploy) Úkoly při vývoji webu
Maven Archetype Plugin Úkol založte si webovku mvn archetype:create -DgroupId=net.jetensky.webandmaven -DartifactId=TestWebApp -DarchetypeArtifactId=maven-archetype-webapp
Úkol spusťte aplikaci v tomcatu mvn package copy target/TestWebApp.war $Tomcat/webapps $Tomcat/bin/startup.bat
Úkol na index.jsp zobrazte aktuální čas IndexControllerServlet.java - do requestu dá "time" web.xml registrace nového servletu na *.html web-app version="2.5" index.jsp - Cas je: ${time} Vyzkoušejte to A teď bude potřeba přidat ještě ${user} - co vše musíte udělat?
javax.servlet servlet-api 2.5 provided jstl taglibs standard Dependency k úkolu
Vývoj webapp Jak se řeší nutnost buildování Waru? Build buildí přímo do tomcat/webapps I tak však usíme při změně kódu pouštět build Používáme Exploded War a IDE kompiluje do WEB-INF/classes Při změně.java nutno restartovat tomcat (nebo touch web.xml) Debugujeme aplikaci přes Java Remote Debugging - změny IDE přenese Nepřenesou se větší strukturální změny To řeší Java Rebel - komerční, složitá konfigurace
TestWebApp org.mortbay.jetty maven-jetty-plugin 10 Maven Jetty Plugin Vyvíjíme fofrem
Úkol vypusťte jettyho 1. mvn jetty:run ve složce aplikace 2. Proveďte změnu v IndexControllerServlet.java - uložte do request scope message a zobrazte na JSP stránce ${message} 3. Propagujte změnu do jettyho 1. Make Idea, Save v Eclipse nebo mvn compile z command line 4. Chvilku počkejte a pak reload v prohlížeči, změny se projeví
Maven Cargo Plugin Když jetty nestačí Automatická instalace kontejneru ze ZIPu z URL Deploy jednoho nebo více J2EE (War, EAR) do kontejneru Podporované kontejnery - Jboss, Tomcat, Jetty, Weblogic, OC4j, Jonas Podporované kontejnery Spuštění kontejneru v rámci integračního testu (HttpUnit, Selenium) Archetypy: Single Webapp Module Archetype, Separate Functional Test Module Archetype
org.codehaus.cargo cargo-maven2-plugin tomcat6x 6/v6.0.20/bin/apache-tomcat zip Cargo - Automatická instalace kontejneru z URL
Úkol stáhněte si v buildu tomcat 1. Nakonfigurujte si v pom.xml cargo plugin pro tomcat6x s ZipUrlInstaller 2. mvn package cargo:start 1. Tomcat se stáhne z uvedené URL, rozbalí a spustí s vaší aplikací 3. Ověřte URL v prohlížeči 4. Hotovo :)? Použijte element ZipUrlInstaller/installDir ${project.build.directory}/cargoinstalls
org.codehaus.cargo cargo-maven2-plugin... kontejner s ZipUrlInstaller... ${pom.groupId} TestWebApp1 war test1 Deploy více warů Varianta kontejner z URL
Úkol deploy více warů Varianta kontejner z URL 1. Vytvořte si TestWebApp1 a TestWebApp2 a instalujte do lokální repo (mvn install) 2. Nakonfigurujte si nový pom.xml s cargo plugin a tomcat6x s ZipUrlInstaller 3. Do pom.xml přidejte TestWebApp1 a 2 jako dependency 4. Přidejte configuration/cofiguration/deployables 5. Spusťte cargo:start 6. Ověřte test1 a test2 v prohlížeči ( a TestWebApp2/index.html) 7. Hotovo:)? Zkuste změnit tomcat za jettyho
runtime admin tomcat6x remote remote Deploy více warů Varianta remote container
Deploy více warů Tomcat uživatel pro deploy
Úkol deploy více warů Varianta remote container 1. Nakonfigurujte si nový pom.xml s cargo plugin a tomcat6x s ZipUrlInstaller 2. Do pom.xml přidejte TestWebApp1 a 2 jako dependency 3. Přidejte configuration/configuration/properties s cargo.tomcat.manager.url (+username, password) 4. Přidejte 5. Spusťte tomcat s nainstalovanou manager aplikací a adminem v tomcat-users 6. Spusťte cargo:deploy 7. Ověřte URL v prohlížeči -
${cargo.remote.password} localhost true admin Deploy více warů profily
localhost true... Deploy více warů Výchozí profil - activation/activeByDefault
Úkol deploy více warů Varianta remote container - profily 1. Do předchozího příkladu doplňte profil localhost na deploy do tomcatu běžícím na jiné URL. 1. V praxi využití např. tyto profily: 1. localhost deploy na lokálně běžící tomcat vývojáře 2. test deploy na referenční testovací prostředí 3. perf-testdeploy na prostředí pro výkonnostní testy 2. Hotovo? Do profilu localhost doplňte activation/activeByDefault
mvn archetype:create -DgroupId=net.jetensky.webandmaven -DartifactId=TestWebApp - DarchetypeGroupId=org.codehaus.cargo - DarchetypeArtifactId= JMENO_ARCHETYPU: cargo-archetype-webapp-single-module Funkční testy jsou v package /it/ v single pom webové aplikace cargo-archetype-webapp-functional-tests-module Funkční testy jsou v samostatném modulu Spuštění kontejneru v rámci integračního testu
Úkol spuštění integračních testů (single module) 1.Vytvořte si maven projekt z archetypu cargo-archetype-webapp-single- module 2.Opravte chybný package montreal.demo 1.src\main\java\net\jetensky\webandmaven\SomeClass.java 2.src\test\java\net\jetensky\webandmaven\SomeClassTest.java 3.Spušťte mvn cargo:install 1.zbuilduje se aplikace 2.spustí se Unit testy 3.spustí se Jetty6 s novou aplikací 4.spustí se integrační test WebappTest.java
Úkol spuštění integračních testů (multi module) 1.Vytvořte si maven projekt z archetypu cargo-archetype-webapp- functional-tests-module 2.Opravte chybu v package jako v předchozím příkladu 3.Spušťte mvn cargo:install v root složce
Prostor pro dotazy Děkuji za pozornost Functional testing with maven and cargo Myšlenky otce Fura - blog o Java (Honza Novotný)Myšlenky otce Fura Jetyho články o vývoji SW na tomto blogu Jetyho blog