将jardesc内容翻译成jar-command

时间:2017-01-18 08:09:09

标签: java eclipse jar

我正在为我们的WebLogic服务器制作一些WebFilter,并且我已经完成所有工作。

问题是如何将过滤器打包到jar文件中。如果我使用以下jardesc文件并从Eclipse创建jar文件,一切正常,WebLogic在加载webfilter类时没有问题。但是一旦我尝试使用jar.exe手动创建jar文件,我在WebLogic中加载webcontainer时就会遇到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-command创建一个jar文件,它似乎等同于在Eclipse中使用jardesc文件生成的jar文件,除了看起来像某个符号链接到根目录中的META-INF文件夹的文件。 jar文件。

工作jar文件的内容: Working jar-file

非工作jar文件的内容 enter image description here

根据jardesc文件,任何人都可以解释执行jar.exe的正确命令吗?

或者

任何人都可以解释一下无效工作文件中的META-INF文件是什么吗?

使用jdk-1.8.0_111 更新了jar命令运行的输出 Output of jar-command

2 个答案:

答案 0 :(得分:1)

正如评论中已经提到的那样。我认为这更像是WinRar的问题,就像实际创建的jar文件一样。可能eclipse不会在内部使用jar命令来创建基于jardesc描述的jar文件。 jar文件的内部结构有所不同。

但是我建议不要依赖eclipse输出,如果你想创建一个你要在某处分发的jar文件。我个人喜欢gradle很多,而且很容易使用。

只需在项目根目录中创建一个build.gradle文件,其中包含以下内容:

apply plugin: 'java'

// this is only needed, if you want to include the single file only
// by default all compiled files will be added to the output jar
jar {
  include "dk/akait/filters/cors/CorsFilter.class"
}

task wrapper(type: Wrapper) {
  gradleVersion = '3.3'
}

运行

%PATH_TO_YOUR_GRADLE_BINARIES%/gradle wrapper

这将生成一个本地包装器bat文件,用于确保您使用所需的gradle版本。

运行

%PROJECT_ROOT%/gradlew.bat build

并找到

下的jar文件
%PROJECT_ROOT%/build/libs

但是,您需要遵循一些约定并将您的Java源代码放在名为src/main/java的文件夹下,以便开箱即用。或者按照this documentation设置不同的源文件夹。

答案 1 :(得分:0)

我认为您的命令行甚至不正确。 根据{{​​1}}输出

  

用法:jar {ctxui} [vfmn0PMe] [jar-file] [manifest-file] [入口点]   [-C dir]文件......

还有http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jar.html

预计在[jar-file]名称之后是[manifest-file]和[entry-point]。

尝试 jar