【问题标题】:Why WebSphere expands jar in /WEB-INF/classes为什么 WebSphere 在 /WEB-INF/classes 中扩展 jar
【发布时间】: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 中。
  • 请查看问题的更新,谢谢。我不知道我为什么要使用配置文件,无论是默认配置。

标签: java websphere


【解决方案1】:

请参阅下面的 Java EE WAR 文件结构。这听起来不像是一个 WebSphere 问题,它不能跨 Java EE 兼容的应用服务器工作。

更新(基于有问题的更新信息):我看到您有一个非常具体的要求。由于您使用 ServletContext 来获取 JAR 文件的引用,因此我建议将其设计在 WEB-INF 内的一个新的单独文件夹中(您的 JAR 将受到保护并且 ServletContext 将能够找到它。)。这样,您将维护 Java EE 规范标准,并且能够做您想做的事情。

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 2011-06-11
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2017-03-24
    相关资源
    最近更新 更多