martedì 18 giugno 2013

deploy da Eclipse con ANT

ANT è un linguaggio di scripting in xml, che consente di effettuare operazioni sul file system, come copiare file, creare cartelle ecc.
In questo esempio consideriamo di operare su Windows.

Vediamo come creare un file xml secondo la codifica ANT da utilizzare per fare il deploy di una applicazione scritta con Eclipse.

Consideriamo l'applicazione precedente e scriviamola con Eclipse (Stiamo usando Eclipse per J2EE).

Creiamo un progetto Java con Eclipse chiamato test006 :


Creiamo una classe Esempio.java dentro il pacchetto di default :
Il cui codice come negli esempi precedenti è:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class Esempio extends HttpServlet {
       public void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
             response.setContentType("text/html");
             PrintWriter out = response.getWriter();
             out.println("<html>");
             out.println("<body>");
             out.println("<h1>Ciao Servlet!!!</h1>");
             out.println("</body>");
             out.println("</html>");
       }
}
 
Creiamo una cartella war nella root e dentro una cartella WEB-INF :
 
Dentro WEB-INF creiamo i file index.html e web.xml il cui codice è rispettivamente :





<A HREF="ciao">Chiama la Servlet</A>


e
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
       <servlet>
             <servlet-name>servlet1</servlet-name>
             <servlet-class>Esempio</servlet-class>
       </servlet>
       <servlet-mapping>
             <servlet-name>servlet1</servlet-name>
             <url-pattern>/ciao</url-pattern>
       </servlet-mapping>
</web-app>
Infine per far compilare il tutto abbiamo bisogno di indicare al nostro progetto i jar delle servlet che saranno esterni :

 
Alla fine avremo questa struttura :
 
Sul file System adesso abbiamo questi percorsi :
 
C:\JAVA\EE lavoro\test06\war\web.xml    
C:\JAVA\EE lavoro\test06\war\index.html 
C:\JAVA\EE lavoro\test06\war\WEB-INF
C:\JAVA\EE lavoro\test06\war
C:\JAVA\EE lavoro\test06\src\Esempio.java
 
ma non solo, infatti dentro la cartella bin ci sarà il .class compilato della classe java :
 
C:\JAVA\EE lavoro\test06\bin\Esempio.class
 
Quello che ci interessa davvero non è il file Java mail class, per passarlo al Tomcat.
 
Per fare il deploy su Tomcat dobbiamo:
  • creare una cartella dentro webapps, chiamata ad esempio proprio test006
  • creare una cartella dentro test006 chiamata WEB-INF
  • creare una cartella dentro WEB-INF chiamata classes
  • copiare tutti i file .class dalla cartella bin dentro la cartella classes
  • copiare il file web.xml dentro la cartella WEB-INF
  • copiare il file index.html dentro la cartella test006
Tutte queste operazioni sono semplici da effettuare ma noiose da fare ogni volta. ANT automatizza queste procedure tramite un linguaggio xml. Per usare ANT si deve creare un file chiamato build.xml da mettere dentro la root di Eclipse :
...EE lavoro\test06\src\build.xml

Consideriamo il codice del build e vediamo cosa fa :

<project name="Ant_Project" basedir="." default="creazionestruttura">
       <target name="info">
             <echo message="Esempio Script Ant" />
       </target>
       <target name="init" depends="info">
             <echo message="init" />
             <property name="tomcat.home" value="C:\Program Files\Apache Software Foundation\Tomcat 7.0" />
       </target>
       <target name="variabili" depends="init">
             <echo message="variabili" />
             <property name="applicazione" value="test06" />
       </target>
       <target name="pulizia" depends="variabili">
             <echo message="Pulizia della struttura" />
             <delete dir="${tomcat.home}/webapps/${applicazione}" />
       </target>

       <target name="creazionestruttura" depends="pulizia">
             <echo message="Creazione della struttura" />
             <mkdir dir="${tomcat.home}/webapps/${applicazione}" />
             <mkdir dir="${tomcat.home}/webapps/${applicazione}/WEB-INF" />
             <mkdir dir="${tomcat.home}/webapps/${applicazione}/WEB-INF/classes" />
             <echo message="${tomcat.home}/webapps/${applicazione}/WEB-INF/classes" />
             <echo message="C:/JAVA/EE lavoro/${applicazione}/bin" />
             <echo message="copio i file" />
             <copy todir="${tomcat.home}/webapps/${applicazione}/WEB-INF/classes">
                    <fileset dir="C:/JAVA/EE lavoro/${applicazione}/bin">
                          <include name="**/*.class"/>
                    </fileset>
             </copy>
             <copy todir="${tomcat.home}/webapps/${applicazione}/WEB-INF">
                    <fileset dir="C:/JAVA/EE lavoro/${applicazione}/war">
                          <include name="**/*.xml"/>
                    </fileset>
             </copy>
             <copy todir="${tomcat.home}/webapps/${applicazione}">  
                    <fileset dir="C:/JAVA/EE lavoro/${applicazione}/war">
                          <include name="**/*.html"/> 
                    </fileset>
             </copy>
       </target>
</project>
I target vengono effettuati se la dipendenza è stata effettuata.
Quindi ad esempio creazionestruttura verrà effettuata solo dopo pulizia .

Il target di partenza viene indicato dall'attributo default nel project . In questo caso il progetto, chiamato in modo arbitrario Ant_Project , partirà dal creazionestruttura .

Il creazionestruttura  aspetta che pulizia  sia terminato.
Il pulizia  aspetta che variabili  sia terminato.
Il variabili aspetta che init sia terminato.
Il  init aspetta che sia info terminato.

Quindi in un certo senso questo file si legge al contrario.

info stampa un messaggio a video utilizzando il comando echo message
init assegna alla proprietà tomcat.home il valore C:\Program Files\Apache Software Foundation\Tomcat 7.0; è simile al mettere dentro una variabile il percorso del tomcat.
variabiliassegna alla proprietà applicazione il valore test06.
pulizia  cancella tutta l'eventuale cartella applicazione col suo contenuto dentro webapps. Vediamo che qui il nome della cartella è dinamico (in questo caso test06) e dipende da cosa abbiamo cablato dentro la proprietà applicazione .
Infine creazionestruttura  fa tutto il resto, crea le cartelle (mkdir dir) e copia i file (copy) dalla cartelle di Eclipse a quelle del Tomcat; include serve a specificare quali tipi di file vanno copiati.

Adesso possiamo lanciare questo script che si occuperà del deploy . Tasto destro sullo script e run as script ANT 1 :


La console ci fornirà un log di questo tipo :

Buildfile: C:\JAVA\EE lavoro\test06\src\build.xml
info:
     [echo] Esempio Script Ant
init:
     [echo] init
variabili:
     [echo] variabili
pulizia:
     [echo] Pulizia della struttura
   [delete] Deleting directory C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\test06
creazionestruttura:
     [echo] Creazione della struttura
    [mkdir] Created dir: C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\test06
    [mkdir] Created dir: C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\test06\WEB-INF
    [mkdir] Created dir: C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\test06\WEB-INF\classes
     [echo] C:\Program Files\Apache Software Foundation\Tomcat 7.0/webapps/test06/WEB-INF/classes
     [echo] C:/JAVA/EE lavoro/test06/bin
     [echo] copio i file
     [copy] Copying 1 file to C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\test06\WEB-INF\classes
     [copy] Copying 1 file to C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\test06\WEB-INF
     [copy] Copying 1 file to C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\test06
BUILD SUCCESSFUL
Total time: 360 milliseconds
 Se andiamo nella cartella del Tomcat troveremo la nostra applicazione :

 
 
 
 E se avviamo il server possiamo testarla al nostro indirizzo locale :
http://localhost:8090/test06/
 

Nessun commento:

Posta un commento