2011-04-05 40 views
5

Me gustaría distribuir mi aplicación empaquetada como WAR incrustada en Apache Tomcat. Es decir, quiero distribuir Tomcat junto con mi aplicación.¿Cómo empaco mi aplicación web y tomcat usando maven?

¿Cómo se puede hacer este tipo de empaque de distribución con Maven?

He visto el Maven Cargo Plugin, pero parece estar orientado a implementar aplicaciones en contenedores localmente. Quizás un paso adicional sobre el complemento Cargo sea lo que necesito. cargo:package parece ser interesante, pero carece de documentación.

+1

¿Has visto 'maven assembly plugin'? http://docs.codehaus.org/display/MAVENUSER/Delivery+with+Tomcat –

+0

No, revisando ahora. Gracias por el enlace –

+2

Tenga en cuenta que empaquetar su aplicación junto con Tomcat probablemente signifique que sus usuarios no utilizarán la última versión de Tomcat. Tomcat también requiere la instalación de Java (JRE). También podría incluir un JRE si incluye Tomcat. – Bernard

Respuesta

8

Al elaborar el comentario de Tomasz, puede hacer lo siguiente para lograrlo.

  1. Descargue e instale tomcat en su repositorio local.

    mvn instalar: instalar archivos -DgroupId = org.apache -DartifactId = Tomcat 7.0.10 -Dversion = -Dpackaging = zip -dfile =/ruta/a/archivo

  2. Uso unpack objetivo de maven dependency plugin a Tomcat descomprimir en una carpeta de trabajo

  3. uso maven assembly plugin colocar la guerra aplicación en la carpeta de aplicaciones web y crear una postal

Se puede hacer referencia a this pom.xml y this descriptor de montaje.

+0

Gracias Raghuram. Aunque todavía no lo he probado, mirando los enlaces que me proporcionó, parece que el complemento de dependencia maven es el camino a seguir –

4

Una mejor manera podría ser algo como se especifica en el Heroku documentation (A pesar de que debería funcionar en aplicaciones no heroku también)

En resumen (Sólo en caso de que el enlace muere)

Tomcat paquete de inserción puede darle una API Tomcat el cual se puede hacer referencia en una de su clase principal,

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-core</artifactId> 
    <version>${tomcat.version}</version> 
</dependency> 

Y se necesitaría una clase como algo principal,

package launch; 

import java.io.File; 
import org.apache.catalina.startup.Tomcat; 

public class Main { 

    public static void main(String[] args) throws Exception { 

     String webappDirLocation = "src/main/webapp/"; 
     Tomcat tomcat = new Tomcat(); 
     tomcat.setPort(8080); 

     tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath()); 
     System.out.println("configuring app with basedir: " + 
      new File("./" + webappDirLocation).getAbsolutePath()); 

     tomcat.start(); 
     tomcat.getServer().await(); 
    } 
} 
Cuestiones relacionadas