gpt4 book ai didi

java - 将 jardesc 内容翻译成 jar 命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:34 25 4
gpt4 key购买 nike

我正在为我们的 WebLogic 服务器制作一些 WebFilters,我已经准备就绪并正在运行。

问题是我如何将过滤器打包成 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 命令创建了一个 jar 文件,它似乎等同于在 Eclipse 中使用 jardesc 文件生成的文件,除了看起来像某种符号链接(symbolic link)到根目录中的 META-INF 文件夹之外jar 文件。

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

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

在给定 jardesc 文件的情况下,谁能解释执行 jar.exe 的正确命令是什么?

或者

谁能解释一下不起作用的 jar 文件中的 META-INF 文件是什么?

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

最佳答案

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

但是,如果您想创建要分发到某个地方的 jar 文件,我建议不要依赖 eclipse 输出。我个人非常喜欢 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设置不同的源文件夹。

关于java - 将 jardesc 内容翻译成 jar 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41714202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com