web-dev-qa-db-fra.com

Eclipse - Tomcat 7 - Java.lang.IndexOutOfBoundsException lors de la publication

J'ai un projet Web utilisant maven et lorsque j'essaie de le déployer sur Tomcat 7, j'obtiens le message suivant:

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.)

Lorsque je regarde le fichier journal de Tomcat dans "myworkpace.metadata.logs", je vois ce qui suit:

!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)

Si j'essaie de publier à nouveau, je n'obtiens que la première erreur:

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

et dans les journaux:

!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)

J'ai essayé de partir d'une installation propre (nettoyer Eclipse, nettoyer Tomcat et nettoyer l'espace de travail), j'ai importé le code de CVS, mais toujours le même problème

Quelqu'un a-t-il des idées sur ce qui peut être incorrect (ou comment je pourrais localiser le problème)?

MODIFIER

Lorsque je crée le projet dans un fichier WAR sur un autre ordinateur et que je déploie ce fichier war directement sur Tomcat via la console de gestion, cela fonctionne.

Je suppose que la construction doit être différente en quelque sorte ...

EDIT2

J'ai supprimé le référentiel maven complet. Après cela, j'ai pu construire le projet correctement et l'exécuter sur Tomcat en utilisant le fichier war exporté.

Cependant, je reçois toujours l'exception IndexOutOfBoundsException lorsque j'essaie de publier directement à partir d'Eclipse

EDIT

Après avoir supprimé le référentiel Maven à quelques reprises, j'ai pu créer et exécuter le projet. Il semble que Maven soit parfois corrompu.

Si d'autres personnes rencontrent ce problème, supprimez le répertoire Maven complet et exécutez une mise à jour maven sur chacun des projets de l'espace de travail.

20
4_y

Le référentiel maven peut être corrompu. Il est préférable de supprimer le référentiel complet et de mettre à jour tous les projets dans l'espace de travail.

22
4_y

Bien que cette question ait été résolue - il s'agissait d'un problème avec un référentiel corrompu, il est possible de déterminer quel pot de votre référentiel est corrompu en déployant la guerre sur Tomcat en dehors d'Eclipse.

Dans ma situation, Tomcat a ensuite signalé dans son journal où se trouvait le problème (guava-13.0.1.jar):

 GRAVE: impossible de traiter l'entrée Jar [com/google/common/collect/package-info.class] à partir du pot 
 [Jar: fichier:/C:/Java/Tomcat/Apache-Tomcat -7.0.42/webapps/myapp/WEB-INF/lib/guava-13.0.1.jar! /] Pour les annotations 
 Java.util.Zip.ZipException: en-tête LOC non valide (mauvaise signature) 
4
jtsnr

Très probablement, un pot de votre dépôt local de maven qui est inclus dans votre .war en tant que dépendance est corrompu. Comme suggéré par jtsnr, vous pouvez déployer votre .war en dehors d'Eclipse pour découvrir quel pot est corrompu. Mais il existe une solution plus rapide. Localisez simplement le répertoire/target de votre projet maven (ou décompressez simplement le .war) et localisez-le dans les fichiers * .jar (devrait être sous WEB-INF/lib). Maintenant, avec un simple outil Zip (par exemple: 7-Zip), sélectionnez tout et extrayez. Vous recevrez une invite pour chaque fichier corrompu que vous avez: après cela, localisez le fichier dans votre référentiel Maven et supprimez la version entière de ce fichier. De cette façon, si vous avez un gros repo, vous gagnez beaucoup de temps en évitant de re-télécharger l'intégralité de l'écosystème du pot :) HTH ..

1
Matteo Pelucco

Essayons une fois la façon dont il est mentionné ci-dessous. veuillez donc supprimer l'installation précédente. Étape 1 Créez un nouveau serveur d'exécution (Fenêtre -> Préférences -> Serveur -> Environnements d'exécution). Étape 2 Ajouter un serveur à Eclipse (Fenêtre -> Afficher la vue -> Serveurs) ajoutez une nouvelle configuration de serveur (cliquez avec le bouton droit et sélectionnez Nouveau -> Serveur) mais N'AJOUTEZ AUCUN PROJET. Étape 3 Ouvrir la page Présentation du serveur Double-cliquez sur la nouvelle configuration du serveur pour afficher la page Présentation du serveur où nous définissons le port et le délai d'expiration du serveur. Étape 4

Sous Emplacements du serveur, sélectionnez Utiliser l'installation Tomcat. Sauvegarder.

Vous devriez pouvoir démarrer votre serveur maintenant. Ajoutez maintenant votre projet au serveur et vous êtes prêt à partir.

0
Varun