2017-01-13 7 views
0

実行時に外部WARをロードするための埋め込みTomcatサーバーを備えたSpring Boot jarを取得しようとしています。私はこのpostに示されている技術を使ってこれをしようとしています。SpringブートアプリケーションにTomcat Embeddedを組み込んで、実行時に外部WARファイルをロードする方法

春ブートアプリケーションにおけるコンテナ豆:外部戦争のための

@Bean 
public EmbeddedServletContainerFactory servletContainerFactory() { 
    return new TomcatEmbeddedServletContainerFactory() { 
     @Override 
     protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) { 
      try { 
       Context context = tomcat.addWebapp(tomcat, "/first", "path/to/my.war"); 
       WebappLoader loader = new WebappLoader(Thread.currentThread().getContextClassLoader()); 
       context.setLoader(loader); 
      } catch (ServletException e) { 
       throw new IllegalStateException("Failed to add webapp", e); 
      } 
      return super.getTomcatEmbeddedServletContainer(tomcat); 
     } 
    }; 
} 

Mavenの依存関係:私は春ブーツコンテナアプリを起動すると

<dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.3.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

、コンテナBeanがwarfileを見つけ、それをクラスパスに追加しますが、ClassNotFoundExceptionをスローします。

2017-01-13 15:14:22.520 INFO 208 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/first] : 1 Spring WebApplicationInitializers detected on classpath 
2017-01-13 15:14:22.520 INFO 208 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/first] : Marking servlet jsp as unavailable 
2017-01-13 15:14:22.520 ERROR 208 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/first] : Servlet [jsp] in web application [/first] threw load() exception 

java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:520) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:501) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1050) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4913) [tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5223) [tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403) [tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393) [tomcat-embed-core-8.5.6.jar!/:8.5.6] 
    at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_112] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_112] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_112] 
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_112] 

私は戦争でorg.apache.jasper.servlet.JspServletを使ってjarを含めようとしました。私はまた、Springブート戦争(アプリケーションクラスはSpringBootApplicationInitializerを拡張し、戦争にパッケージ化し、Tomcatのスターター依存性に与えられたスコープを与える)を試みました。これも同じエラーをもたらします。任意の提案に開放する。

答えて

2

Tomcat-Jasperがありません。組み込みのTomcatのバージョンに応じて、あなたの春ブーツが使用するあなたのpom.xmlに以下の依存関係を追加:春ブーツ1.4.1.RELEASEについては

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-jasper</artifactId> 
    <version>8.5.5</version> 
</dependency> 

それはバージョン8.5.5(Available versions of "tomcat-embed-jasper")です。

Mavenに依存関係を追加した後にライブラリが存在するかどうかを確認するには、アプリケーションをパッケージ化します。パッケージ化されたアプリケーションでは、

\ BOOT-INF \ libに\ Tomcatの-埋め込む-碧玉-8.5.5.jar

の下でそれを見つけるだろう
関連する問題