2012-11-11 32 views
5

我希望/嵌入的Tomcat 我的web应用程序相结合的又名脂肪罐子,但我不知道,如果它的可能。它可能与Jetty using the Maven Shade pluginWinstone,但我尝试了类似的东西与Tomcat 7,无法让它加载正常。目标是能够做到这样的事情:java -jar mywebapp.jar嵌入的Tomcat与App在一胖JAR

问题是,Tomcat希望从文件系统加载东西,而不是从类路径加载东西。这是你可以嵌入Tomcat,但它会希望你的WAR文件可以作为文件。

我尝试了很多以前的SO Posts for embedding Tomcat 6 & 7的技术。虽然我可以将它嵌入并启动,但无法访问我的应用程序。

我想一个选项是启动时将JAR解压缩,以便AppBaseDocBase是文件系统上的文件。我还没有尝试过,但会。

有问题的副本在这里,我终于找到了:Self-contained war file with Tomcat embedded?(请投票接近一式两份)

+0

在webapp中嵌入tomcat ...为了什么? – aviad

+0

对不起,我错过了这个问题。我的意思是结合,而不是嵌入到webapp本身。胖坛子的想法是[简化DevOps](http://dropwizard.codahale.com/getting-started/#building-fat-jars)。所有你需要运行的应用程序是'java -jar my-webapp.jar'。 –

+0

这里是另一个Fat Jar创建的例子:http://one-jar.sourceforge.net/ –

回答

4

我不知道我是如何保持缺少这一点,但Tomcat的Maven插件现在支持生成一个可执行WAR :

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

UPDATE,如果你需要一个Tomcat 8,你需要一个特殊的配置。您的必须使用插件的2.0版本,因为2.2 Tomcat 7插件无法正常工作,您需要第三方插件tomcat8-war-runner。下面我附加了你需要的maven配置,这也允许你选择你想要的正确版本的Tomcat 8(tomcat.version属性)。

Tomcat8 maven插件处于混乱状态,仍然未被释放(请在jira上投票并投诉给他们完成)。

最后,这个maven插件方法的一个主要警告是插件伪嵌入。那就是你的应用程序不会像Tomcat一样运行在相同的类加载器中,而是在初始化期间实际部署的。这种方法有利有弊。

另一方面,Spring Boot和example from Oracle会在与您的应用程序相同的类加载器中运行Tomcat(也就是说,它确实嵌入了我的想法)。

<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>