我正在创建一个简单的批处理程序,该程序应该打包在JAR中,其中包含所有依赖项。 JAR-in-JAR eclipse方式使我的程序变得如此缓慢,所以我选择将所需的库提取到我的JAR中。这样可以加快执行速度但是让我的JAR" root"文件夹如此详细。提取罐子我用过
<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 /文件夹添加到类路径但它不起作用。有人可以帮帮我吗?
答案 0 :(得分:1)
Java类文件必须存在于.jar文件中,其路径与其完全限定名称完全匹配(意思是包+&#34;。&#34; +简单类名)。例如,类com.example.Person
必须作为com/example/Person.class
存在于.jar文件中。
这意味着当包含来自另一个.jar的类文件时,您无法使用prefix
的{{1}}属性。
清单的Class-Path attribute不引用.jar文件中的路径。它是以空格分隔的其他.jar文件的相对URL列表(相对于包含清单的.jar)。 .jar文件始终被视为类路径条目的根;无法将.jar中的路径引用为类路径条目。
我不确定是什么情况&#34;详细&#34;关于.jar文件的根目录。据我所知,ANTLR类只添加一个zipfileset
目录。