【发布时间】:2015-04-13 19:57:41
【问题描述】:
我在 WebSphere 8.5.5 中有一个奇怪的问题。 我有一个简单的 .war 存档,它在 /WEB-INF/classes 下有一个 jar(是的,classes,这不是错字)。例如,
/WEB-INF/classes/my_file.jar
在 WebSphere 8.5.5 上,我在尝试仅加载应用程序时遇到了异常。
这是一个例外(为了清楚起见,稍微缩短了一点):
Caused by: org.eclipse.jst.j2ee.commonarchivecore.internal.exception.SaveFailureException: WEB-INF/classes/my_file.jar
at org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.ZipStreamSaveStrategyImpl.save(ZipStreamSaveStrategyImpl.java:327)
//
org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategyImpl.save(SaveStrategyImpl.java:217)
at org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ArchiveImpl.save(ArchiveImpl.java:2388)
at org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ModuleFileImpl.save(ModuleFileImpl.java:516)
at org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ArchiveImpl.saveAsNoReopen(ArchiveImpl.java:2608)
at org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ArchiveImpl.saveAs(ArchiveImpl.java:2428)
at com.ibm.ws.management.application.client.AppInstallHelper.createEarWrapper(AppInstallHelper.java:1045)
... 41 more
Caused by: java.util.zip.ZipException: ZIP_Read: error reading zip file
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1200(ZipFile.java:47)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:501)
at java.util.zip.ZipFile$1.fill(ZipFile.java:269)
//
at java.io.FilterInputStream.read(FilterInputStream.java:101)
at org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil.copy(ArchiveUtil.java:180)
at org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.ZipStreamSaveStrategyImpl.save(ZipStreamSaveStrategyImpl.java:320)
... 56 more
我从异常中了解到 jar 文件不是有效的 zip 文件。我缺少的是为什么 WebSphere 试图复制和解压缩它?我可以阻止 WebSphere 这样做吗?
更新:我认为这需要澄清。我非常了解 Java EE 战争结构。所述罐子故意在 /classes/ 下。在运行时,它被定位(使用 ServletContext.getResource())并复制到一个临时文件夹,然后从那里在另一个 Java 进程中启动它。 我的问题不是关于 Java 战争结构,而是关于 WebSphere 为何尝试解压缩它以及我是否可以以某种方式控制这种 WebSphere 行为。
更新 2: 结果证明这不是问题。 jar 文件已损坏并被替换。我把这个问题留在这里是因为我仍然很想知道为什么 WebSphere 会尝试解压缩它以及我是否可以控制它。现有的答案没有回答所问的问题。
【问题讨论】:
-
首先你应该把你的罐子放在
WEB-INF/lib而不是classes文件夹中。其次,我只是在类中部署了对 jar 的战争,而 WAS 并没有尝试扩展它。所以请说明您使用的是什么版本(Liberty 或完整),您如何部署您的应用程序,因为它更可能与 Eclipse 相关的错误与 WAS 相关,以及为什么您不将 jar 放入 WEB-INF\lib 中。 -
请查看问题的更新,谢谢。我不知道我为什么要使用配置文件,无论是默认配置。