Eclipse 生成的war文件在JBoss中无效
Posted
技术标签:
【中文标题】Eclipse 生成的war文件在JBoss中无效【英文标题】:Eclipse generated war file is invalid in JBoss 【发布时间】:2012-12-17 03:03:08 【问题描述】:我在部署到 JBoss 时遇到了 Eclipse 生成的战争文件的问题。我已经在 Eclipse 中配置了一个 JBoss 5.1.0 实例并将 Eclipse 部署到 JBoss。启动时,JBosss 抱怨它无法读取 zip 文件(我假设它是 war 文件,因为它没有告诉我任何其他信息)。错误是这样的:
13:27:08,824 错误 [ProfileDeployAction] 无法添加部署:test.war org.jboss.deployers.spi.DeploymentException:错误确定结构:test.war 在 org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49) 在 org.jboss.web.deployers.WARStructure.determineStructure(WARStructure.java:248) 在 org.jboss.deployers.vfs.plugins.structure.StructureDeployerWrapper.determineStructure(StructureDeployerWrapper.java:73) 在 org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl.doDetermineStructure(VFSStructuralDeployersImpl.java:196) 在 org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl.determineStructure(VFSStructuralDeployersImpl.java:221) 在 org.jboss.deployers.structure.spi.helpers.AbstractStructuralDeployers.determineStructure(AbstractStructuralDeployers.java:77) 在 org.jboss.deployers.plugins.main.MainDeployerImpl.determineStructure(MainDeployerImpl.java:1004) 在 org.jboss.deployers.plugins.main.MainDeployerImpl.determineDeploymentContext(MainDeployerImpl.java:440) 在 org.jboss.deployers.plugins.main.MainDeployerImpl.addDeployment(MainDeployerImpl.java:390) 在 org.jboss.deployers.plugins.main.MainDeployerImpl.addDeployment(MainDeployerImpl.java:300) 在 org.jboss.system.server.profileservice.repository.MainDeployerAdapter.addDeployment(MainDeployerAdapter.java:86) 在 org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:61) 在 org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53) 在 org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:361) 在 org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 在 org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631) 在 org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 在 org.jboss.system.server.profileservice.repository.AbstractProfileService.activateProfile(AbstractProfileService.java:306) 在 org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:271) 在 org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461) 在 org.jboss.Main.boot(Main.java:221) 在 org.jboss.Main$1.run(Main.java:556) 在 java.lang.Thread.run(Thread.java:662) 引起:java.lang.RuntimeException:java.util.zip.ZipException:打开zip文件时出错 在 org.jboss.virtual.plugins.context.AbstractExceptionHandler.handleZipEntriesInitException(AbstractExceptionHandler.java:39) 在 org.jboss.virtual.plugins.context.helpers.NamesExceptionHandler.handleZipEntriesInitException(NamesExceptionHandler.java:63) 在 org.jboss.virtual.plugins.context.zip.ZipEntryContext.ensureEntries(ZipEntryContext.java:626) 在 org.jboss.virtual.plugins.context.zip.ZipEntryContext.checkIfModified(ZipEntryContext.java:773) 在 org.jboss.virtual.plugins.context.zip.ZipEntryContext.getChild(ZipEntryContext.java:817) 在 org.jboss.virtual.plugins.context.zip.ZipEntryHandler.createChildHandler(ZipEntryHandler.java:191) 在 org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.structuredFindChild(AbstractVirtualFileHandler.java:684) 在 org.jboss.virtual.plugins.context.zip.ZipEntryHandler.getChild(ZipEntryHandler.java:165) 在 org.jboss.virtual.plugins.context.DelegatingHandler.getChild(DelegatingHandler.java:107) 在 org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.structuredFindChild(AbstractVirtualFileHandler.java:689) 在 org.jboss.virtual.plugins.context.zip.ZipEntryHandler.getChild(ZipEntryHandler.java:165) 在 org.jboss.virtual.plugins.context.DelegatingHandler.getChild(DelegatingHandler.java:107) 在 org.jboss.virtual.VirtualFile.getChild(VirtualFile.java:481) 在 org.jboss.deployers.vfs.spi.structure.helpers.AbstractStructureDeployer.applyMetadataPaths(AbstractStructureDeployer.java:481) 在 org.jboss.deployers.vfs.spi.structure.helpers.AbstractStructureDeployer.createContext(AbstractStructureDeployer.java:455) 在 org.jboss.web.deployers.WARStructure.determineStructure(WARStructure.java:204) ... 25 更多 原因:java.util.zip.ZipException:打开 zip 文件时出错 在 java.util.zip.ZipFile.open(本机方法) 在 java.util.zip.ZipFile.(ZipFile.java:127) 在 java.util.zip.ZipFile.(ZipFile.java:143) 在 org.jboss.virtual.plugins.context.zip.ZipFileWrapper.ensureZipFile(ZipFileWrapper.java:175) 在 org.jboss.virtual.plugins.context.zip.ZipFileWrapper.acquire(ZipFileWrapper.java:245) 在 org.jboss.virtual.plugins.context.zip.ZipEntryContext.initEntries(ZipEntryContext.java:484) 在 org.jboss.virtual.plugins.context.zip.ZipEntryContext.ensureEntries(ZipEntryContext.java:619) ... 38 更多我检查了 war 文件,它看起来没问题,令人惊讶的是,如果我提取 war 文件并使用 7zip 压缩其内容,JBoss 可以正常启动。我对 Eclipse 如何创建 JBoss 无法读取的 war 文件感到困惑。相同的战争文件适用于 Tomcat。
有人见过这个吗?我怎样才能解决这个问题?
【问题讨论】:
我会弄清楚 JDK Eclipse 使用的是什么版本,而 JBoss 使用的是什么版本。看起来您需要确定您正在处理的 java.util.zip.* 版本。 【参考方案1】:正如另一个SO article 中指出的那样,一个可能的问题是JVM 正在尝试解压缩到它无法写入的临时目录。尝试确定它试图解压缩到的位置。
【讨论】:
【参考方案2】:所以在调试后我发现其中一个库 jar 文件的大小为零。 jar 大小为零的项目是空的,eclipse 为它生成了一个大小为零的 jar 文件(无论出于何种原因)。我不确定以前可以通过什么组合将war文件部署到jboss,但这绝对是主要问题。
【讨论】:
【参考方案3】:可能是你的 web.xml 文件问题,我也面临同样的问题,经过很多不同的尝试,我正要继续讨论另一篇关于 web.xml 和 web-app 的文章3.0。这让我开始思考,我检查了我的 web.xml。果然,下面一行就在最上面。
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
我改用了 2.5 版的网络应用规范。 WAR 和 EAR 都不会部署。
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
【讨论】:
以上是关于Eclipse 生成的war文件在JBoss中无效的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Eclipse 将 Maven 项目的 WAR 部署到 JBoss 服务器?
如何在 JBoss 7.0 中使用standalone.xml 分离应用程序日志