2010-12-16 93 views
0

我一直在尝试将一些配置文件添加到JAR清单类路径中。像Spring,Log4j文件等等......当我运行jar时,它会在classpath中拾取其他jar,以便它可以运行应用程序启动器类(它位于另一个jar中),但它仅查找目录中的XML文件尽管我可以在清单上看到它的路径,但该jar仍在。未找到java类路径中的XML文件

关于如何解决这个问题的任何想法?

+0

classpath与XML文件有什么关系?据我了解,classpath是用于类加载的。要访问JAR中的文件,通常使用Object.getResource()。你究竟想要做什么? – 2010-12-16 15:52:42

+0

@Sergey:资源也在类路径上(认为是log4j.properties) – 2010-12-16 15:55:51

+0

是的,你说得对,我把它看错了。但是stwb说“它只能查找jar所在目录中的XML文件”,所以在我看来,他试图以普通文件的形式访问它们,而不是资源,这是我的主要观点。 – 2010-12-16 16:41:56

回答

0

尝试在java命令行中使用详细的类加载开关运行它,以确保jar中的类实际上正在加载。

MANIFEST.MF中有72字节的行长限制 - 确保您没有长行。

http://download.oracle.com/javase/1.3/docs/guide/jar/jar.html#Notes%20on%20Manifest%20and%20Signature%20Files

+0

感谢maximdim。这条线很长。前72个字节会被读取还是会被忽略?另外,是否有一种方法可以有两个多类路径定义而不覆盖以前的那些? – stwb 2010-12-17 11:01:49

+0

以其UTF8编码形式的 形式,没有行可能长于72个字节(不是字符)。如果一个值会使初始行比这更长,那么应该在额外的行上继续(每个行从一个空格开始)。最好使用诸如ant或maven之类的构建工具来为你生成清单文件 - 他们会正确处理这个问题 – maximdim 2010-12-20 16:07:28

+0

噢,好吧,我正在使用Ant,所以一定不能成为问题。我决定尝试一个不同的路线,并尝试从Ant构建文件中运行jar。只需使用jar属性执行并在其中设置类路径。希望这会产生更好的结果。 – stwb 2010-12-21 10:05:31