2012-11-11 10 views
5

Ich hatte gehofft Tomcat und meine Web-App wie aka Fettglas zu kombinieren/einbinden, aber ich bin mir nicht sicher, ob es möglich ist. Es ist möglich mit Jetty using the Maven Shade plugin und Winstone, aber ich habe etwas ähnliches mit Tomcat 7 versucht und konnte es nicht richtig laden. Das Ziel ist, in der Lage zu sein, etwas wie zu tun: java -jar mywebapp.jar.Embed Tomcat mit App in einem dicken Glas

Das Problem ist, dass Tomcat Dinge aus dem Dateisystem und nicht aus dem Klassenpfad laden möchte. Das heißt, Sie können Tomcat einbetten, aber es wird erwartet, dass Ihre WAR-Dateien als Dateien verfügbar sind.

Ich habe viele der Techniken auf vorherige SO Posts for embedding Tomcat 6 & 7 versucht. Während ich es einbetten und starten kann, kann es nicht auf meine App zugreifen.

Ich denke, eine Option ist das JAR beim Booten entpacken sich selbst, so dass AppBase und DocBase Dateien auf dem Dateisystem sind. Ich habe das noch nicht ausprobiert, werde es aber tun.

Es ist ein Duplikat der Frage hier, dass ich endlich gefunden: Self-contained war file with Tomcat embedded? (bitte stimmen als Duplikat zu schließen)

+0

einbinden tomcat in webapp ... what for? – aviad

+0

Sorry, ich habe die Frage nicht formuliert. Ich meinte kombinieren und nicht in die Webanwendung selbst einbetten. Die Idee eines Fettglases ist [DevOps vereinfachen] (http://dropwizard.codahale.com/getting-started/#building-fat-jars). Alles, was Sie zum Ausführen der App benötigen, ist 'java -jar my-webapp.jar'. –

+0

Hier ist ein weiteres Beispiel für die Erstellung von Fat Jar: http://one-jar.sourceforge.net/ –

Antwort

4

Ich habe keine Ahnung, wie ich das immer fehlt aber das Tomcat Maven Plugin unterstützt nun eine ausführbare WAR machen :

http://tomcat.apache.org/maven-plugin-2.0/executable-war-jar.html

UPDATE wenn Sie Tomcat benötigen 8 benötigen Sie eine spezielle Konfiguration. Sie müssen die 2.0 Version des Plugins verwenden, da das 2.2 Tomcat 7 Plugin nicht funktioniert und Sie das Drittanbieter-Plugin tomcat8-war-runner benötigen. Unten habe ich die Maven-Konfiguration angehängt, die Sie benötigen, um auch die richtige Version von Tomcat 8 (tomcat.version Eigenschaft) auszuwählen.

Das Tomcat8 Maven Plugin ist in einem unordentlichen Zustand und wurde noch nicht veröffentlicht (bitte gehen Sie auf jira und beschweren Sie sich, um es zu beenden).

Schließlich ein Haupthindernis mit diesem Maven-Plugin-Ansatz ist, dass das Plugin Pseudo eingebettet. Das bedeutet, dass Ihre App nicht im selben Klassenlader wie Tomcat ausgeführt wird und während der Initialisierung tatsächlich bereitgestellt wird. Für diesen Ansatz gibt es Vor- und Nachteile.

Spring Boot und diese example from Oracle auf der anderen Seite wird Tomcat in der gleichen Classloader wie Ihre App (das ist es wirklich eingebettet, denke ich) laufen.

<plugin> 
     <groupId>org.apache.tomcat.maven</groupId> 
     <artifactId>tomcat7-maven-plugin</artifactId> 
     <version>2.0</version> 
     <configuration> 
     <port>${tomcat.port}</port> 
     <path>/</path> 
     </configuration> 
     <executions> 
     <execution> 
      <id>tomcat-run</id> 
      <goals> 
      <goal>exec-war-only</goal> 
      </goals> 
      <phase>package</phase> 
      <configuration> 
      <path>/</path> 
      <port>${tomcat.port}</port> 
      <attachArtifactClassifierType>war</attachArtifactClassifierType> 
      <mainClass>org.apache.tomcat.maven.runner.Tomcat8RunnerCli</mainClass> 
      <extraDependencies> 
       <extraDependency> 
       <groupId>com.nitorcreations</groupId> 
       <artifactId>tomcat8-war-runner</artifactId> 
       <version>1.0</version> 
       </extraDependency> 
      </extraDependencies> 
      </configuration> 
     </execution> 
     </executions> 
     <dependencies> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-core</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-util</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-coyote</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-api</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 

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

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

     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-servlet-api</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jsp-api</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 

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

     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jasper-el</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-el-api</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 

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

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

     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-catalina-ha</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-annotations-api</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 

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

     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-logging-juli</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-logging-log4j</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     </dependencies> 
    </plugin>