【发布时间】:2017-01-18 08:09:09
【问题描述】:
我正在为我们的 WebLogic 服务器制作一些 WebFilters,并且一切都已启动并运行。
问题是我如何将过滤器打包成 jar 文件。如果我使用以下 jardesc 文件并从 Eclipse 创建 jar 文件,一切正常,WebLogic 加载 webfilter 类没有问题。但是,当我尝试仅使用 jar.exe 手动创建 jar 文件时,我在 WebLogic 中加载 Web 容器时会遇到 ClassNotFoundExceptions。
工作 jardesc 文件:
<?xml version="1.0" encoding="WINDOWS-1252" standalone="no"?>
<jardesc>
<jar path="C:/Workspace/Java/Jars/jars/corsfilter.jar"/>
<options buildIfNeeded="true" compress="true" descriptionLocation="/CorsFilter/corsfilter.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
<selectedProjects/>
<manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
<sealing sealJar="false">
<packagesToSeal/>
<packagesToUnSeal/>
</sealing>
</manifest>
<selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
<file path="/CorsFilter/.project"/>
<file path="/CorsFilter/.classpath"/>
<javaElement handleIdentifier="=CorsFilter/src"/>
</selectedElements>
</jardesc>
当前 jar 命令:
jar -cvf corsfilter.jar .project .classpath -C .\bin dk\akait\filters\cors\CorsFilter.class
jar 命令创建一个 jar 文件,它似乎与在 Eclipse 中使用 jardesc 文件生成的相同,除了看起来像是指向 META-INF 文件夹根目录中的某种符号链接jar 文件。
在给定 jardesc 文件的情况下,谁能解释执行 jar.exe 的正确命令是什么?
或者
谁能解释不工作的 jar 文件中的 META-INF 文件是什么?
【问题讨论】:
-
您使用的是哪个版本的 Java?我刚刚用 jdk-1.8.0_92 64bit 尝试了你的 jar 命令,但没有得到不祥的 META-INF 条目。但是,我真的建议不要依赖 eclipse 或任何手动制作的命令行来打包过滤器。你应该试试 gradle。这听起来可能有点矫枉过正,但只要你不想要一些非常特别的东西,它实际上很容易上手。如果这是一个选项,我可以制作一些基本的 gradle 文件来进行打包......
-
您能否也添加 jar 命令的命令行输出?
-
用 java 版本和 jar-command 的输出更新了问题。
-
这有点奇怪。我尝试使用相同的 Java 版本进行复制,但没有得到这个空的 META-INF 条目。您使用什么工具来检查生成的 jar 文件?那么 gradle 选项呢?
-
我将在今天晚些时候尝试 gradle,是的,META-INF 条目看起来确实很奇怪。可能需要研究 zip 文件的结构,看看它是否是一个红色heering。