2017-05-09 22 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>