240 likes | 365 Views
Tvorba webových aplikací s Apache Maven. Jety Pavel Jetenský 29.10.2009. Využití Mavenu pro efektivní vývoj. Úkoly při vývoji webu. Založení nové webové aplikace Vývoj webové aplikace Nasazení ( deploy ). Maven Archet ype Plugin Úkol 1.1 - založte si webovku. mvn archetype:create
E N D
Tvorba webových aplikacís Apache Maven Jety Pavel Jetenský 29.10.2009 Využití Mavenu pro efektivní vývoj
Úkoly při vývoji webu Založení nové webové aplikace Vývoj webové aplikace Nasazení (deploy)
Maven Archetype PluginÚkol 1.1 - založte si webovku mvn archetype:create -DgroupId=net.jetensky.webandmaven -DartifactId=TestWebApp -DarchetypeArtifactId=maven-archetype-webapp
Úkol 1.2 - spusťte aplikaci v tomcatu mvn package copy target/TestWebApp.war $Tomcat/webapps $Tomcat/bin/startup.bat http://localhost:8080/TestWebApp
Úkol 1.3 - 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?
Dependency k úkolu <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
Vývoj webappJak 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
MavenJettyPluginVyvíjíme fofrem <build> <finalName>TestWebApp</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin> </plugins> </build>
Úkol 2.1 - vypusťte jettyho mvnjetty:run ve složce aplikace Proveďte změnu v IndexControllerServlet.java - uložte do requestscopemessage a zobrazte na JSP stránce ${message} Propagujte změnu do jettyho Make Idea, Save v Eclipse nebo mvncompile z command line Chvilku počkejte a pak reload v prohlížeči, změny se projeví
Maven Cargo PluginKdyž 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 Spuštění kontejneru v rámci integračního testu (HttpUnit, Selenium) Archetypy: Single Webapp Module Archetype, Separate Functional Test Module Archetype
Cargo - Automatická instalace kontejneru z URL <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <configuration> <container> <containerId>tomcat6x</containerId> <zipUrlInstaller> <url>http://www.apache.org/dist/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip</url> </zipUrlInstaller> </container> </configuration> </plugin>
Úkol 3.1 - stáhněte si v buildu tomcat Nakonfigurujte si v pom.xmlcargoplugin pro tomcat6x s ZipUrlInstaller mvnpackagecargo:start Tomcat se stáhne z uvedené URL, rozbalí a spustí s vaší aplikací Ověřte URL v prohlížeči http://localhost:8080/TestWebApp/index.html Hotovo :)? Použijte element ZipUrlInstaller/installDir<installDir>${project.build.directory}/cargoinstalls</installDir>
Deploy více warů Varianta kontejner z URL <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <configuration> <container>... kontejner s ZipUrlInstaller ...</container> <configuration> <deployables><!--Deployables musí byt i dependency pomu --> <deployable> <groupId>${pom.groupId}</groupId> <artifactId>TestWebApp1</artifactId> <type>war</type> <properties><!-- url bude localhost/test --> <context>test1</context> </properties> </deployable> <!-- dalsi wary, ejb nebo eary --> </deployables> </configuration> </configuration> </plugin>
Úkol 3.2 - deploy více warůVarianta kontejner z URL Vytvořte si TestWebApp1 a TestWebApp2 a instalujte do lokální repo (mvninstall) Nakonfigurujte si nový pom.xml s cargoplugin a tomcat6x s ZipUrlInstaller Do pom.xml přidejte TestWebApp1 a 2 jako dependency Přidejte configuration/cofiguration/deployables Spusťte cargo:start Ověřte test1 a test2 v prohlížeči (http://localhost:8080/TestWebApp1/index.html a TestWebApp2/index.html) Hotovo:)? Zkuste změnit tomcat za jettyho
Deploy více warů Varianta remote container <plugin> <!-- doplnte cargo groupId a artifactId --> <configuration> <configuration> <type>runtime</type> <properties> <cargo.tomcat.manager.url>http://localhost:8080/manager</cargo.tomcat.manager.url> <cargo.remote.username>admin</cargo.remote.username> <cargo.remote.password></cargo.remote.password> </properties> </configuration> <container> <containerId>tomcat6x</containerId> <type>remote</type> </container> <deployer> <type>remote</type> <deployables> <!-- doplnte deployables --> </deployables> </deployer> </configuration> </plugin>
Deploy více warů Tomcat uživatel pro deploy <!-- CATALINA_HOME/conf/tomcat-users.xml --> <tomcat-users> <role rolename="manager"/> <user username="admin" password="" roles="manager"/> <!-- <role </tomcat-users>
Úkol 3.2.1 - deploy více warůVarianta remote container Nakonfigurujte si nový pom.xml s cargo plugin a tomcat6x s ZipUrlInstaller Do pom.xml přidejte TestWebApp1 a 2 jako dependency Přidejte configuration/configuration/properties s cargo.tomcat.manager.url (+username, password) Přidejte configuration/deployer[@type="remote"]/deployables Spusťte tomcat s nainstalovanou manager aplikací a adminem v tomcat-users Spusťte cargo:deploy Ověřte URL v prohlížeči - http://localhost:8080/manager/html
Deploy více warů profily <!-- ukazka pouziti property --> <cargo.remote.password>${cargo.remote.password}</cargo.remote.password> <!-- Deploy na localhost pres http - tomcat managera--> <profile> <id>localhost</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <cargo.tomcat.manager.url>http://localhost:8080/manager</cargo.tomcat.manager.url> <cargo.remote.username>admin</cargo.remote.username> <cargo.remote.password></cargo.remote.password> </properties> </profile>
Deploy více warů Výchozí profil - activation/activeByDefault <!-- Deploy na localhost pres http - tomcat managera--> <profile> <id>localhost</id> <!-- mvn cargo:start je nyní stejne jako mvn cargo:start -P localhost --> <activation> <activeByDefault>true</activeByDefault> </activation> ... </profile>
Úkol 3.2.2 - deploy více warůVarianta remote container - profily Do předchozího příkladu doplňte profil localhost na deploy do tomcatu běžícím na jiné URL. V praxi využití např. tyto profily: localhost deploy na lokálně běžící tomcat vývojáře test deploy na referenční testovací prostředí perf-test deploy na prostředí pro výkonnostní testy Hotovo? Do profilu localhost doplňte activation/activeByDefault
Spuštění kontejneru v rámci integračního testu • mvn archetype:create -DgroupId=net.jetensky.webandmaven -DartifactId=TestWebApp -DarchetypeGroupId=org.codehaus.cargo -DarchetypeArtifactId=<JMENO_ARCHETYPU> • JMENO_ARCHETYPU: • cargo-archetype-webapp-single-moduleFunkční testy jsou v package /it/ v single pom webové aplikace • cargo-archetype-webapp-functional-tests-moduleFunkční testy jsou v samostatném modulu
Úkol 3.3.1 - spuštění integračních testů(single module) • Vytvořte si maven projekt z archetypu cargo-archetype-webapp-single-module • Opravte chybný packagemontreal.demo • src\main\java\net\jetensky\webandmaven\SomeClass.java • src\test\java\net\jetensky\webandmaven\SomeClassTest.java • Spušťtemvncargo:install • zbuilduje se aplikace • spustí se Unit testy • spustí se Jetty6 s novou aplikací • spustí se integrační test WebappTest.java
Úkol 3.3.2 - spuštění integračních testů(multi module) Vytvořte si maven projekt z archetypu cargo-archetype-webapp-functional-tests-module Opravte chybu v package jako v předchozím příkladu Spušťte mvn cargo:install v root složce
Prostor pro dotazyDěkuji za pozornost • Functional testing with maven and cargo • Myšlenky otce Fura - blog o Java (Honza Novotný) • Jetyho články o vývoji SW na tomto blogu • Jetyho blog