web-dev-qa-db-ja.com

Eclipse-Tomcat 7-公開時のJava.lang.IndexOutOfBoundsException

Mavenを使用するWebプロジェクトがあり、Tomcat 7にデプロイしようとすると、次のメッセージが表示されます。

Publishing failed
Could not publish to the server.
Java.lang.IndexOutOfBoundsException
Could not publish server configuration: myworkspace\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\conf\server.xml (The system cannot find the path specified.). 
myworkspace\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\conf\server.xml (The system cannot find the path specified.)

「myworkpace.metadata.logs」でTomcatのログファイルを見ると、次のように表示されます。

!ENTRY org.Eclipse.wst.server.core 4 0 2013-11-22 13:36:40.128
!MESSAGE Publishing failed
!SUBENTRY 1 org.Eclipse.wst.server.core 4 0 2013-11-22 13:36:40.128
!MESSAGE Could not publish to the server.
!STACK 0
Java.lang.IndexOutOfBoundsException
    at Java.io.BufferedInputStream.read(BufferedInputStream.Java:338)
    at org.Eclipse.jdt.internal.compiler.util.Util.getInputStreamAsByteArray(Util.Java:498)
    at org.Eclipse.jdt.core.ToolFactory.createDefaultClassFileReader(ToolFactory.Java:269)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.isEJBArchive(JavaEEArchiveUtilities.Java:900)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.refineForJavaEE(JavaEEArchiveUtilities.Java:606)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.openArchive(JavaEEArchiveUtilities.Java:370)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.openBinaryArchive(JavaEEArchiveUtilities.Java:290)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper$ArchiveCache.openArchive(JavaEEBinaryComponentHelper.Java:612)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.openArchive(JavaEEBinaryComponentHelper.Java:470)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.getUniqueArchive(JavaEEBinaryComponentHelper.Java:422)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.getArchive(JavaEEBinaryComponentHelper.Java:415)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.getJavaEEQuickPeek(JavaEEBinaryComponentHelper.Java:98)
    at org.Eclipse.jst.j2ee.project.JavaEEProjectUtilities.getJ2EEComponentType(JavaEEProjectUtilities.Java:273)
    at org.Eclipse.jst.j2ee.internal.common.exportmodel.JEEHeirarchyExportParticipant.isChildModule(JEEHeirarchyExportParticipant.Java:42)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.isChildModule(FlatVirtualComponent.Java:367)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.addUsedReferences(FlatVirtualComponent.Java:305)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.treeWalk(FlatVirtualComponent.Java:235)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.cacheResources(FlatVirtualComponent.Java:188)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.fetchResources(FlatVirtualComponent.Java:118)
    at org.Eclipse.wst.web.internal.deployables.FlatComponentDeployable.members(FlatComponentDeployable.Java:227)
    at org.Eclipse.jst.j2ee.internal.deployables.J2EEFlexProjDeployable.members(J2EEFlexProjDeployable.Java:267)
    at org.Eclipse.wst.server.core.internal.ModulePublishInfo.getDelta(ModulePublishInfo.Java:407)
    at org.Eclipse.wst.server.core.internal.ServerPublishInfo.getDelta(ServerPublishInfo.Java:366)
    at org.Eclipse.wst.server.core.internal.Server.getPublishedResourceDelta(Server.Java:1574)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.getPublishedResourceDelta(ServerBehaviourDelegate.Java:698)
    at org.Eclipse.jst.server.Tomcat.core.internal.TomcatServerBehaviour.getPublishedResourceDelta(TomcatServerBehaviour.Java:958)
    at org.Eclipse.jst.server.Tomcat.core.internal.PublishOperation2.publishDir(PublishOperation2.Java:137)
    at org.Eclipse.jst.server.Tomcat.core.internal.PublishOperation2.execute(PublishOperation2.Java:82)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.performTasks(ServerBehaviourDelegate.Java:1335)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.Java:954)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.Java:774)
    at org.Eclipse.wst.server.core.internal.Server.publishImpl(Server.Java:3153)
    at org.Eclipse.wst.server.core.internal.Server$PublishJob.run(Server.Java:345)
    at org.Eclipse.core.internal.jobs.Worker.run(Worker.Java:53)
!SUBENTRY 1 org.Eclipse.jst.server.Tomcat.core 4 0 2013-11-22 13:36:40.128
!MESSAGE Could not publish server configuration: C:\IBM\workspace\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\conf\server.xml (The system cannot find the path specified.).
!STACK 0
Java.io.FileNotFoundException: myworkspace\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\conf\server.xml (The system cannot find the path specified.)
    at Java.io.FileInputStream.open(Native Method)
    at Java.io.FileInputStream.<init>(FileInputStream.Java:149)
    at org.Eclipse.jst.server.Tomcat.core.internal.TomcatVersionHelper.publishCatalinaContextConfig(TomcatVersionHelper.Java:499)
    at org.Eclipse.jst.server.Tomcat.core.internal.Tomcat70Configuration.publishContextConfig(Tomcat70Configuration.Java:674)
    at org.Eclipse.jst.server.Tomcat.core.internal.TomcatServerBehaviour.publishFinish(TomcatServerBehaviour.Java:462)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.Java:1011)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.Java:774)
    at org.Eclipse.wst.server.core.internal.Server.publishImpl(Server.Java:3153)
    at org.Eclipse.wst.server.core.internal.Server$PublishJob.run(Server.Java:345)
    at org.Eclipse.core.internal.jobs.Worker.run(Worker.Java:53)

再度公開しようとすると、最初のエラーのみが表示されます。

Could not publish to the server.
Java.lang.IndexOutOfBoundsException

そしてログ:

!ENTRY org.Eclipse.wst.server.core 4 0 2013-11-22 13:41:18.645
!MESSAGE Could not publish to the server.
!STACK 0
Java.lang.IndexOutOfBoundsException
    at Java.io.BufferedInputStream.read(BufferedInputStream.Java:338)
    at org.Eclipse.jdt.internal.compiler.util.Util.getInputStreamAsByteArray(Util.Java:498)
    at org.Eclipse.jdt.core.ToolFactory.createDefaultClassFileReader(ToolFactory.Java:269)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.isEJBArchive(JavaEEArchiveUtilities.Java:900)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.refineForJavaEE(JavaEEArchiveUtilities.Java:606)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.openArchive(JavaEEArchiveUtilities.Java:370)
    at org.Eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities.openBinaryArchive(JavaEEArchiveUtilities.Java:290)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper$ArchiveCache.openArchive(JavaEEBinaryComponentHelper.Java:612)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.openArchive(JavaEEBinaryComponentHelper.Java:470)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.getUniqueArchive(JavaEEBinaryComponentHelper.Java:422)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.getArchive(JavaEEBinaryComponentHelper.Java:415)
    at org.Eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper.getJavaEEQuickPeek(JavaEEBinaryComponentHelper.Java:98)
    at org.Eclipse.jst.j2ee.project.JavaEEProjectUtilities.getJ2EEComponentType(JavaEEProjectUtilities.Java:273)
    at org.Eclipse.jst.j2ee.internal.common.exportmodel.JEEHeirarchyExportParticipant.isChildModule(JEEHeirarchyExportParticipant.Java:42)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.isChildModule(FlatVirtualComponent.Java:367)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.addUsedReferences(FlatVirtualComponent.Java:305)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.treeWalk(FlatVirtualComponent.Java:235)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.cacheResources(FlatVirtualComponent.Java:188)
    at org.Eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.fetchResources(FlatVirtualComponent.Java:118)
    at org.Eclipse.wst.web.internal.deployables.FlatComponentDeployable.members(FlatComponentDeployable.Java:227)
    at org.Eclipse.jst.j2ee.internal.deployables.J2EEFlexProjDeployable.members(J2EEFlexProjDeployable.Java:267)
    at org.Eclipse.wst.server.core.internal.ModulePublishInfo.fillCache(ModulePublishInfo.Java:314)
    at org.Eclipse.wst.server.core.internal.ModulePublishInfo.getDelta(ModulePublishInfo.Java:396)
    at org.Eclipse.wst.server.core.internal.ServerPublishInfo.getDelta(ServerPublishInfo.Java:366)
    at org.Eclipse.wst.server.core.internal.Server.getPublishedResourceDelta(Server.Java:1574)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.getPublishedResourceDelta(ServerBehaviourDelegate.Java:698)
    at org.Eclipse.jst.server.Tomcat.core.internal.TomcatServerBehaviour.getPublishedResourceDelta(TomcatServerBehaviour.Java:958)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.computeDelta(ServerBehaviourDelegate.Java:874)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.Java:909)
    at org.Eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.Java:774)
    at org.Eclipse.wst.server.core.internal.Server.publishImpl(Server.Java:3153)
    at org.Eclipse.wst.server.core.internal.Server$PublishJob.run(Server.Java:345)
    at org.Eclipse.core.internal.jobs.Worker.run(Worker.Java:53)

クリーンインストール(クリーンEclipse、クリーンTomcat、クリーンワークスペース)から始めて、CVSからコードをインポートしようとしましたが、それでも同じ問題があります

誰が間違っている可能性があるのか​​(または問題を特定する方法)についてのアイデアはありますか?

[〜#〜] edit [〜#〜]

プロジェクトを別のコンピューターのWARファイルにビルドし、このwarファイルを管理コンソール経由でTomcatに直接デプロイすると、機能します。

私の推測では、ビルドは何らかの形で異なっている必要があります...

EDIT2

完全なMavenリポジトリーを削除しました。これを見て、プロジェクトを正しくビルドし、エクスポートされたwarファイルを使用してTomcatで実行することができました。

ただし、Eclipseから直接公開しようとするとIndexOutOfBoundsExceptionが発生します

EDIT

Mavenリポジトリーを数回削除した後、プロジェクトをビルドして実行することができました。 Mavenは時々破損するようです。

他の人がこの問題を抱えている場合、完全なMavenディレクトリを削除し、ワークスペース内の各プロジェクトでmaven更新を実行します。

20
4_y

Mavenリポジトリが破損している可能性があります。完全なリポジトリを削除し、ワークスペース内のすべてのプロジェクトを更新することをお勧めします。

22
4_y

この質問は回答済みですが、破損したリポジトリの問題でしたが、Eclipseの外部のTomcatにwarをデプロイすることにより、リポジトリ内のどのjarが破損しているかを判断することができます。

私の状況では、Tomcatはログで問題が発生した場所を報告しました(guava-13.0.1.jar):

重大:Jar 
 [jar:file:/ C:/ Java/Tomcat/Apache-TomcatのJarエントリ[com/google/common/collect/package-info.class]を処理できません-7.0.42/webapps/myapp/WEB-INF/lib/guava-13.0.1.jar!/]アノテーション
 Java.util.Zip.ZipException:無効なLOCヘッダー(不正な署名)
4
jtsnr

おそらく、依存関係が破損しているため、.warに含まれているローカルMavenリポジトリのいくつかのjarファイルが破損しています。 jtsnrが示唆したように、Eclipseの外部に.warをデプロイして、破損しているjarを検出できます。しかし、より迅速な解決策があります。 Mavenプロジェクトの/ target dirを見つける(または.warを解凍する)だけで、*。jarファイル内に配置します(WEB-INF/libの下にある必要があります)。これで、シンプルなZipツール(例:7-Zip)ですべてを選択して抽出します。破損したファイルごとにプロンプ​​トが表示されます。この後、Mavenリポジトリでファイルを見つけ、そのファイルのバージョン全体を削除します。このようにして、大きなリポジトリがある場合、jarエコシステム全体を再ダウンロードすることを回避するために多くの時間を得ることができます:) HTH ..

1
Matteo Pelucco

以下に記載されている方法で一度試してみましょう。そのため、以前のインストールを削除してください。ステップ1新しいサーバーランタイムを作成します(ウィンドウ->設定->サーバー->ランタイム環境)。ステップ2サーバーをEclipseに追加(ウィンドウ->ビューの表示->サーバー)新しいサーバー構成を追加(右クリックして[新規]-> [サーバー]を選択)しますが、プロジェクトを追加しないでください。ステップ3サーバー概要ページを開く新しいサーバー構成をダブルクリックして、サーバーのポートとタイムアウトを設定するサーバー概要ページを表示します。ステップ4

[サーバーの場所]で[Tomcatインストールを使用]を選択します。セーブ。

これでサーバーを起動できるはずです。サーバーにプロジェクトを追加すると、準備が整いました。

0
Varun