2017-05-09 21 views
1

我已经搜索了这个问题,但是我没有找到任何关于这种情况的信息。我发现了很多“如何将Spring Boot WAR部署到Tomcat”,但没有涉及使用Spring Boot来包装现有的Tomcat WAR。将现有WAR添加到嵌入式tomcat中

我想用Spring Boot“包装器”包装现有的WAR,以便现有的代码库不必重新配置。 This solution不起作用,因为它取决于WAR在绝对位置可用,而我们正试图将“应用程序”WAR打包到Spring Boot WAR中。然后,我们可以像这样添加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文件。 ClassLoader不会加载它,因为它不在WEB-INF/classes之下。

/WEB-INF/lib-provided有抓住这个战争的方式(或任何方式)吗?

+0

您的目标是让WAR成为一个嵌入式Tomcat应用程序,并且您正在使用Spring Boot实现它,或者您是否想要充分利用Spring Boot?我不确定您是否可以利用Spring Boot的优势,而无需重新配置应用程序以使用Spring Boot。 – qtips

+0

我们的简介是将现有应用程序变为Spring Boot应用程序,并尽可能地进行更改。理想情况下,我们根本不会触及现有的应用程序,只需将其包装在Spring Boot Shell中,并使其可执行而无需单独的Tomcat实例。我确信Spring Boot可以做得更多,但我们没有被分配任务。 – user1071914

+0

在你的情况下使用Spring Boot的目的是什么?我明白你的任务就是尽可能快地开始使用Spring Boot。如果您的目的可以通过其他一些简单的方法实现,我会问。创建一个将您的应用程序嵌入到tomcat独立服务器中的Main类。另外,开始使用Spring Boot可能也很简单,有时你只需要改变你的POM并创建一个Main类。 – qtips

回答

0

对于任何人需要做到这一点,答案是使用maven-dependency-plugin并设置spring-boot-maven-plugin排除从资源(否则你得到的WAR的两个副本包含在你的春季启动WAR)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>