2017-05-09 13 views
1

私はこの問題について尋ねましたが、このケースでは何も見つかりません。私は "Spring Boot WARをTomcatにデプロイする方法"はたくさん見つけましたが、Spring Bootで既存のTomcat WARをラップする方法については何も見つかりませんでした。埋め込まれたtomcatに既存のWARを追加する

私は、既存のコードベースを再構成する必要がないように、春ブーツ「ラッパー」で、既存のWARをラップしようとしています。 This solutionは絶対的な場所で利用可能なWARに依存しているのに対し、SpringブートWARの中では「アプリケーション」WARをパッケージ化しようとしているため動作しません。次に、このようなWARのコンテキストを追加することができます。

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

これはほとんど動作しています。私は1つの特定の問題に問題があります。既存のWARファイルをSpringブートプロジェクトにドロップすると、/WEB-INF/classesの代わりに/WEB-INF/lib-providedにドロップされます。埋め込みTomcatにこの場所からWARファイルを追加する方法を見つけることができません。 ClassLoaderはWEB-INF/classesの下にないため、ロードしません。

/WEB-INF/lib-providedからこのWARをつかんでの巧みな方法(または任意の方法)はありますか?これを実行する必要がある他の誰のために、答えは(そうでなければ、WARの2つのコピーがあなたの春ブーツWARに含まれ得る)maven-dependency-pluginを使用して、リソースからWARファイルを除外するようにspring-boot-maven-pluginを設定することです

+0

WARを埋め込みTomcatアプリケーションにして、それを達成するためにSpring Bootを使用しているか、SpringBootを最大限に使用したいですか? Springブートを使用するようにアプリケーションを再構成することなく、Springブートの利点を活用できるかどうかはわかりません。 – qtips

+0

私たちの要点は、既存のアプリケーションを可能な限り小さな変更でSpringブートアプリケーションにすることです。理想的には、既存のアプリケーションには触れません。Springブートシェルでラップし、別のTomcatインスタンスなしで実行可能にするだけです。私はSpring Bootがはるかに多くのことがあると確信していますが、私たちはそれに任されていません。 – user1071914

+0

あなたのケースでSpring Bootを使用する目的は何ですか?あなたの仕事は、Spring Bootを可能な限り早く使い始めることだと思います。私はあなたの目的が他のより簡単な方法で達成できるかどうかを尋ねています。アプリケーションをTomcatスタンドアロンサーバーに組み込むMainクラスを作成します。また、Spring Bootを使い始めるのも非常に簡単です.pomを変更してMainクラスを作成するだけで済む場合もあります。 – qtips

答えて

0

 <!-- 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> 
関連する問題