java - 使用前缀解压 JAR 中的依赖项

标签 java eclipse ant jar

我正在制作一个简单的批处理程序,应将其打包在包含所有依赖项的 JAR 中。 JAR-in-JAR eclipse 方式使我的程序如此缓慢,所以我选择将所需的库提取到我的 JAR 中。这样可以加快执行速度,但会使我的 JAR“根”文件夹变得非常冗长。为了提取 jar,我使用了

<zipfileset excludes="META-INF/**.*" src="${dep.dir}/antlr-2.7.7.jar" />

并且它工作正常。当我尝试使用这样的前缀

<zipfileset excludes="META-INF/**.*" prefix="dep/" src="${dep.dir}/antlr-2.7.7.jar" />

我的程序因 ClassNotFoundException 崩溃,因为它找不到该异常。我尝试编辑 MANIFEST 以将 dep/文件夹添加到类路径中,但它不起作用。有人可以帮助我吗?

最佳答案

Java 类文件必须存在于 .jar 文件中,并且其路径与其完全限定名称(即包+“.”+简单类名)完全匹配。例如,com.example.Person 类必须作为 com/example/Person.class 存在于 .jar 文件中。

这意味着在包含来自另一个 .jar 的类文件时,您不能使用 zipfilesetprefix 属性。

Class-Path attribute list 的 不引用 .jar 文件中的路径。它是其他 .jar 文件的相对 URL(相对于包含 list 的 .jar)的以空格分隔的列表。 .jar 文件始终被视为类路径条目的根;无法将 .jar 中的路径引用为类路径条目。

我不确定 .jar 文件的根目录有何“冗长”之处。据我所知,ANTLR 类仅向其中添加一个 org 目录。

关于java - 使用前缀解压 JAR 中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534069/

相关文章:

java - 将 Java 项目转换为动态 Web 项目

java - Eclipse 无法理解我编辑了一个类

android - 如何使用 ant 运行 android 库的单元测试?

java - Ant Build 没有给出确切的类文件

java - 编译 OpenGTS 失败

java - 在 java rest 服务中发送 excel 作为下载响应时要设置的编码类型是什么

java - 在 Eclipse 中调试(Java);中断查看值时不能将鼠标悬停在变量上

java - 谷歌地图 api v2 android : How to Remove a single marker?

java - 如何将结果集对象与字符串进行比较?

java - 使用 @autowired 到 DI 后得到一个 null 对象