当前位置: 首页 > 知识库问答 >
问题:

将现有WAR添加到嵌入式tomcat

法兴德
2023-03-14

我已经搜索了这个问题,但我没有找到任何关于这个案例的东西。我发现了很多“如何将Spring Boot WAR部署到Tomcat”,但是没有关于用Spring Boot包装现有的Tomcat WAR的内容。

我正在尝试用Spring Boot“包装器”包装一个现有的WAR,这样就不必重新配置现有的代码库。这个解决方案不起作用,因为它依赖于在绝对位置可用的WAR,而我们正试图将“应用程序”WAR打包在Spring Boot WAR中。然后我们可以像这样添加战争的上下文:

Context context = tomcat.addWebapp("myapp", Thread.currentThread().getContextClassLoader().getResource("myapp.war").getPath());

这差不多管用了。我有一个问题。当现有WAR文件被放入Spring Boot项目时,它会被放入/WEB-INF/lib-provided而不是/WEB-INF/classes。我找不到让嵌入的Tomcat从这个位置添加WAR文件的方法。类加载器不会加载它,因为它不在web-inf/classes下。

/web-inf/lib-provided中获取这场战争有没有一种巧妙的方法(或任何方法)?

共有1个答案

柳宪
2023-03-14

对于任何需要这样做的人,答案是使用maven-dependency-plugin并设置spring-boot-maven-plugin以从资源中排除WAR文件(否则,您将获得包含在Spring BootWAR中的WAR的两个副本):

        <!-- include your WAR as a resource instead of a dependency -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <excludeTransitive>true</excludeTransitive>
                        <includeArtifactIds>my-war-name-here</includeArtifactIds>
                        <stripVersion>true</stripVersion>
                        <outputDirectory>${project.basedir}/src/main/resources</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>


        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.5.3.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <!-- Don't copy the war as a dependency, it's included as a resource -->
                        <excludeArtifactIds>my-war-name-here</excludeArtifactIds>
                    </configuration>
                </execution>
            </executions>
        </plugin>
 类似资料:
  • 在我们的项目中,当将另一个现有war文件添加到Grails/Spring Boot中的嵌入式tomcat容器时,我们的默认Hibernate会话似乎丢失了。 我们使用的是在Spring boot上构建的Grails3.3.1,并通过applications.groovy文件以这种方式将现有的war文件添加到emnbedded tomcat中。 当设置了上述内容后,应用程序和外部war文件都将启动,

  • 问题内容: Spring Boot的嵌入式tomcat非常便于开发和部署。 但是,如果应该添加另一个(第三方)WAR文件(例如GeoServer)怎么办? 也许以下是正常过程: 安装普通的Tomcat服务器。 将Spring Boot应用程序构建为WAR文件,并将其添加到Tomcat的webapps文件夹中。 还将另一个(第三方)WAR文件添加到webapps文件夹。 但是,如果可以进行以下配置,

  • Spring Boot的嵌入式tomcat对于开发和部署都非常方便。 但是,如果应该添加另一个(第三方)WAR文件(例如,GeoServer)怎么办? 安装普通Tomcat服务器。 将Spring Boot应用程序构建为WAR文件,并将其添加到Tomcat的webapps文件夹中。 还要向webapps文件夹中添加另一个(第三方)WAR文件。 但如果有以下配置可能就好了。 将Spring Boot

  • 问题内容: 有人可以向我解释如何将WAR文件添加到EAR吗?我有一个已经包含一个WAR文件的EAR文件,我有另一个我想添加到该EAR的WAR文件,因此它可以同时包含两个WAR并正常工作。 我不知道该怎么做,但我认为可以手动更改EAR中包含的application.xml文件。 谢谢! 问题答案: 假设EAR文件中尚未包含WAR文件,则可以使用常见的zip实用程序在EAR文件中添加WAR文件。 请注

  • 基本上,我想在Tomcat 8嵌入式中运行一些Rest类。我不确定如何将它们添加到我正在创建的tomcat嵌入式实例中。所以这就是我所做的。这里只有泽西班: 下面是我创建Tomcat的类: 正如你看到的,带问号的部分给我制造麻烦。还有一个lats问题,这就是我应该添加这些类以在服务器上运行的方式,对吗? 更新我添加了Michal Gajdos建议的行,但在启动时我得到: 线程“main”java中

  • 我有一个现有的Solr设置,运行在一个独立的Solr实例上。我被要求为此设置添加弹性和高可用性。因此,我想将复制添加到我的设置中,我认为SolrCloud是一种方式? 我已经在SolrCloud wiki上浏览了演示。然而,我不确定如何将现有的Solr实例添加到ZooKeeper,然后再添加一些节点以供复制。这是否可以不重新膨胀? 维基上说 注意:如果不使用示例启动solr,请确保在创建集合之前将