maven-cargo-plugin を使用して、組み込みの Tomcat 7 に Web アプリケーションをデプロイする際に問題が発生しています。webapps pom で新しい Maven プロファイルを作成しました。このプロファイルは、maven-cargo-plugin を介して Tomcat コンテナーを作成し、soapui-maven-plugin を介して soapui テスト ケースを実行します。
webapp はいくつかの IBM WebSphere MQ に接続するため、いくつかのコンテナー構成ファイルを上書きしました。
- JNDI ルックアップのために MQ をリソースとして server.xml に追加しました
- web.xml をオーバーライドして、カスタム applicationContext.xml をクラスパスに追加しました
- MQ に接続するために必要な context.xml に必要なリソースを追加しました
- ローカルにインストールされた IBM Websphere MQClient の lib ディレクトリへのパスをコンテナーの common.loader に追加して、その libs をコンテナーで使用できるようにしました。
さらに、必要な websphere.mq.*.jar ファイルと j2ee-1.4.jar をローカルの WebSphere Server インストールから Tomcat コンテナーの lib ディレクトリにコピーし、それらを cargos<file>
タグで追加しました。
このコマンドでMavenを起動すると(runITsが作成されたプロファイルをアクティブにします):
clean verify -U -Dhttps.protocols=TLSv1,SSLv3 -DrunITs -X
デプロイは次のエラーで失敗します:
INFO] [talledLocalContainer] org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cargocpc]]
[INFO] [talledLocalContainer] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
[INFO] [talledLocalContainer] at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
[INFO] [talledLocalContainer] at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1081)
[INFO] [talledLocalContainer] at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1877)
[INFO] [talledLocalContainer] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
[INFO] [talledLocalContainer] at java.util.concurrent.FutureTask.run(FutureTask.java:262)
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745)
[INFO] [talledLocalContainer] Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
[INFO] [talledLocalContainer] at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:90)
[INFO] [talledLocalContainer] at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1577)
[INFO] [talledLocalContainer] at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281)
[INFO] [talledLocalContainer] at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:889)
[INFO] [talledLocalContainer] at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
[INFO] [talledLocalContainer] at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
[INFO] [talledLocalContainer] at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
[INFO] [talledLocalContainer] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5412)
[INFO] [talledLocalContainer] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
[INFO] [talledLocalContainer] ... 10 more
私はすでに可能な解決策を検索しようとしましたが、ここで提供されている解決策を試してみました: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
しかし、次の理由により、考えられる原因を除外できました。
- 私のコンテナは Tomcat 7 であるため、サーブレット API 2.5 をサポートしています
- web.xml は Servlet API 2.5 に準拠しています
- または に j2ee.jar または servlet-api.jar ファイルがありませ
WEB-INF/lib
んJRE/lib
セットアップがこれら 3 つのポイントに準拠していることを確認した後も、上記のエラーが発生します。
他に何がこれを引き起こす可能性があるか知っている人はいますか?