将Tomcat与应用程序嵌入一个胖罐中

Ada*_*ent 7 java tomcat jar build onejar

我希望结合/嵌入Tomcat 我的网络应用程序作为 aka胖罐但我不确定它是否可能.使用Maven Shade插件Winstone可以使用Jetty但是我尝试了类似于Tomcat 7的东西并且无法正确加载它.目标是能够做到:java -jar mywebapp.jar.

问题是Tomcat想要从文件系统而不是从类路径加载东西.也就是说,您可以嵌入Tomcat,但它会期望您的WAR文件可用作文件.

我尝试了以前SO帖子中的许多技术来嵌入Tomcat 6和7.虽然我可以嵌入它并启动它无法访问我的应用程序.

我想一个选项是有开机的JAR解压缩本身,以便AppBaseDocBase在文件系统上的文件.我还没试过,但是会的.

这里有一个重复的问题,我终于找到了:嵌入Tomcat的自包含war文件?(请以复制方式投票结束)

Ada*_*ent 5

我不知道我怎么一直错过这个,但是Tomcat Maven插件现在支持制作可执行的WAR:

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

如果您需要Tomcat 8,则需要进行更新。您必须使用插件的2.0版本,因为2.2 Tomcat 7插件将无法使用,并且您需要第三方插件tomcat8-war-runner。下面我附上了您将需要的maven配置,该配置还允许您选择所需的Tomcat 8的正确版本(tomcat.version属性)。

Tomcat8 maven插件处于混乱状态,但尚未发布(请对jira进行投票并向他们投诉以完成此操作)。

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

另一方面,Spring Boot和来自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>
Run Code Online (Sandbox Code Playgroud)