Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将现有WAR添加到嵌入式tomcat_Java_Spring_Tomcat_Spring Boot - Fatal编程技术网

Java 将现有WAR添加到嵌入式tomcat

Java 将现有WAR添加到嵌入式tomcat,java,spring,tomcat,spring-boot,Java,Spring,Tomcat,Spring Boot,我在谷歌上搜索过这个问题,但我没有找到任何关于这个案子的信息。我找到了很多“如何将SpringBootWar部署到Tomcat”,但没有找到任何关于用SpringBoot包装现有Tomcat WAR的内容 我试图用一个Spring引导“包装器”包装一个现有的WAR,这样就不必重新配置现有的代码库。不起作用,因为它取决于WAR在绝对位置的可用性,而我们正试图将“应用程序”WAR打包到Spring Boot WAR中。然后我们可以像这样添加战争的背景: Context context = tomca

我在谷歌上搜索过这个问题,但我没有找到任何关于这个案子的信息。我找到了很多“如何将SpringBootWar部署到Tomcat”,但没有找到任何关于用SpringBoot包装现有Tomcat WAR的内容

我试图用一个Spring引导“包装器”包装一个现有的WAR,这样就不必重新配置现有的代码库。不起作用,因为它取决于WAR在绝对位置的可用性,而我们正试图将“应用程序”WAR打包到Spring Boot WAR中。然后我们可以像这样添加战争的背景:

Context context = tomcat.addWebapp("myapp", Thread.currentThread().getContextClassLoader().getResource("myapp.war").getPath());
这几乎奏效了。我有一个具体问题。将现有WAR文件放入Spring Boot项目时,它将被放入提供的
/WEB-INF/lib
中,而不是
/WEB-INF/classes
。我找不到方法让嵌入的Tomcat从这个位置添加WAR文件。类加载器不会加载它,因为它不在
WEB-INF/classes


是否有一种巧妙的方法(或任何方法)可以从
/WEB-INF/lib提供的
中获取这场战争?

对于其他需要这样做的人,答案是使用
maven依赖插件
,并设置
spring boot maven插件
,将WAR文件从资源中排除(否则,您将获得两份包含在春季战靴中的战争副本):


org.apache.maven.plugins
maven依赖插件
3.0.0
复制依赖项
产生资源
复制依赖项
真的
我的战名在这里
真的
${project.basedir}/src/main/resources
org.springframework.boot
springbootmaven插件
1.5.3.1发布
重新包装
我的战名在这里

您的目标是使WAR成为一个嵌入式Tomcat应用程序,并且您正在使用Spring Boot来实现它,还是希望充分利用Spring Boot?我不确定您是否可以在不重新配置应用程序以使用Spring Boot的情况下利用Spring Boot的优点。我们的任务是将现有应用程序变成Spring Boot ap应用程序,尽可能少的更改。理想情况下,我们根本不会接触现有的应用程序,只需将其包装在Spring Boot外壳中,并使其在没有单独的Tomcat实例的情况下可执行。我相信Spring Boot可以做更多的事情,但我们还没有被赋予这样的任务。在您的情况下使用Spring Boot的目的是什么?我理解你的任务就是尽可能快地开始使用Spring Boot。我想问的是,你的目的是否可以通过其他更简单的方法实现,例如,创建一个将你的应用程序嵌入tomcat独立服务器的主类。此外,开始使用Spring Boot也可能非常简单,有时你只需要更改pom并创建一个主类。我们的应用程序是一个遗留应用程序,我们被命令不要触摸它,甚至不要更新依赖项。如果这个“包装器”概念无法实现,我们最终可能会修改应用程序本身。
        <!-- 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>