tvorba webových aplikací s apache maven
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
Tvorba webových aplikacís Apache Maven
Využití Mavenu pro efektivní vývoj
Jety Pavel Jetenský
29.10.2009
1. Založení nové webové aplikace
2. Vývoj webové aplikace
3. Nasazení (deploy)
Úkoly při vývoji webu
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> <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>
Dependency k úkolu
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
<build> <finalName>TestWebApp</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin> </plugins></build>
Maven Jetty PluginVyvíjíme fofrem
Úkol 2.1 - 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 jettyho1. 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 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
<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>
Cargo - Automatická instalace kontejneru z URL
Úkol 3.1 - stáhněte si v buildu tomcat
1. Nakonfigurujte si v pom.xml cargo plugin pro tomcat6x s ZipUrlInstaller
2. mvn package cargo:start1. Tomcat se stáhne z uvedené URL, rozbalí a spustí s vaší aplikací
3. Ověřte URL v prohlížeči http://localhost:8080/TestWebApp/index.html
4. Hotovo :)? Použijte element ZipUrlInstaller/installDir<installDir>${project.build.directory}/cargoinstalls</installDir>
<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>
Deploy více warůVarianta kontejner z URL
Úkol 3.2 - 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 (http://localhost:8080/TestWebApp1/index.html a TestWebApp2/index.html)
7. Hotovo:)? Zkuste změnit tomcat za jettyho
<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ůVarianta remote container
<!-- CATALINA_HOME/conf/tomcat-users.xml --><tomcat-users> <role rolename="manager"/> <user username="admin" password="" roles="manager"/> <!-- <role </tomcat-users>
Deploy více warůTomcat uživatel pro deploy
Úkol 3.2.1 - 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 configuration/deployer[@type="remote"]/deployables
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 - http://localhost:8080/manager/html
<!-- 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ůprofily
<!-- 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>
Deploy více warůVýchozí profil -
activation/activeByDefault
Úkol 3.2.2 - 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-test deploy 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>
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 3.3.1 - 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.demo1. src\main\java\net\jetensky\webandmaven\SomeClass.java2. src\test\java\net\jetensky\webandmaven\SomeClassTest.java
3. Spušťte mvn cargo:install1. zbuilduje se aplikace2. spustí se Unit testy3. spustí se Jetty6 s novou aplikací4. spustí se integrační test WebappTest.java
Úkol 3.3.2 - 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říkladu3. 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