2012-11-11 12 views
5

Miałem nadzieję połączyć/osadzić Tomcat i moją aplikację internetową jako aka słoika tłuszczu, ale nie jestem pewien, czy jest to możliwe. Jest to możliwe z Jetty using the Maven Shade plugin i Winstone, ale spróbowałem czegoś podobnego z Tomcat 7 i nie mogłem go załadować poprawnie. Celem jest zrobienie czegoś takiego: java -jar mywebapp.jar.Osadź Tomcat z aplikacją w jednym tłustym słoju

Problem polega na tym, że Tomcat chce ładować rzeczy z systemu plików, a nie ze ścieżki klas. To znaczy, że możesz osadzić Tomcat, ale będzie oczekiwał, że twoje pliki WAR będą dostępne jako pliki.

Próbowałem wielu technik z poprzedniego SO Posts for embedding Tomcat 6 & 7. Mimo że mogę je osadzić i uruchomić, nie może uzyskać dostępu do mojej aplikacji.

Domyślam się, że jedną z opcji jest JAR podczas bootowania, więc AppBase i DocBase są plikami w systemie plików. Jeszcze tego nie próbowałem, ale będę.

Istnieje duplikat pytanie tutaj, że w końcu znalazłem: Self-contained war file with Tomcat embedded? (proszę głosować zamknąć jako duplikat)

+0

Zamieść tomcat w webapp ... po co? – aviad

+0

Przepraszam, że tęsknię za słowem. Miałem na myśli połączenie, a nie osadzanie w samej aplikacji internetowej. Ideą słoika jest uproszczenie DevOps (http://dropwizard.codahale.com/getting-started/#building-fat-jars). Wszystko czego potrzebujesz do uruchomienia aplikacji to 'java -jar my-webapp.jar'. –

+0

Oto kolejny przykład tworzenia Fat Jar: http://one-jar.sourceforge.net/ –

Odpowiedz

4

nie mam pojęcia, jak Ciągle brakuje tego, ale Tomcat Maven Plugin obsługuje teraz uczynić wykonywalnego WAR :

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

UPDATE jeśli potrzebujesz Tomcat 8 trzeba specjalnej konfiguracji. Musisz używać wersji 2.0 wtyczki, ponieważ wtyczka 2.2 Tomcat 7 nie będzie działała i będziesz potrzebować wtyczki innej firmy tomcat8-war-runner. Poniżej załączam konfigurację maven, która będzie Ci potrzebna, co pozwoli ci wybrać właściwą wersję Tomcat 8, którą chcesz (tomcat.version).

Wtyczka Tomcat8 maven jest w nieuporządkowanym stanie i nadal nie została wydana (proszę przejść do głosowania na jirę i narzekać, aby dokończyć).

Wreszcie jednym z głównych zastrzeżeń przy użyciu tej wtyczki jest to, że wtyczka jest pseudo osadzona. To oznacza, że ​​Twoja aplikacja nie będzie działać w tym samym programie ładującym klasy, co Tomcat i faktycznie zostanie wdrożona podczas inicjowania. Istnieją takie argumenty za i przeciw.

Spring Boot i ten example from Oracle z drugiej strony uruchomi Tomcat w tym samym programie ładującym klasy co twoja aplikacja (to jest naprawdę osadzona, jak sądzę).

<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> 
Powiązane problemy