为什么WebSphere在/ WEB-INF / classes中扩展jar

时间:2015-04-13 19:57:41

标签: java websphere

我在WebSphere 8.5.5中遇到了一个奇怪的问题。 我有一个简单的.war存档,在/ WEB-INF / classes下有一个jar(是的,,这不是拼写错误)。例如,

/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战争结构。所述罐子在/有/有目的地。在运行时,它被定位(使用ServletContext.getResource())并复制到临时文件夹,然后从另一个Java进程启动它。 我的问题不是Java战争结构,而是关于为什么WebSphere试图解压缩它以及我是否能以某种方式控制这种WebSphere行为。

更新2:结果证明这不是问题。 jar文件已损坏并被替换。我在这里留下这个问题是因为我仍然很想知道为什么WebSphere会尝试解压缩它以及我是否可以控制它。现有的答案没有回答问题。

1 个答案:

答案 0 :(得分:-1)

请参阅下面的Java EE WAR文件结构。它听起来不像WebSphere问题,它不适用于兼容Java EE的应用程序服务器。

Standard Java EE WAR file structure

更新(根据相关的更新信息):我发现您有一个非常具体的要求。由于您使用ServletContext来获取JAR文件的引用,我建议将其设计在WEB-INF内的一个新的单独文件夹中(您的JAR将受到保护,ServletContext将能够找到它。)。这样您将保持Java EE规范标准,并且能够执行您要执行的操作。