【发布时间】:2013-10-09 01:52:05
【问题描述】:
我有一个 jar 文件,其中提到了清单中的主类。 当我尝试使用以下命令执行 jar 时
java -cp .;./* com.foo.MainClass
代码执行并工作。
当我尝试使用以下命令执行 jar 时
java -cp .;./* -jar myjar.jar
对于与 myjar.jar 位于同一文件夹中的某些 jar,我得到了 class not found execptions。我希望 -cp 选项将这些 jar 包含在类路径中。 我修改了我的代码以打印 java.class.path 属性。在第一种情况下,它列出了当前目录中的所有 jars,在第二种情况下,它只列出了 myjar.jar
我还修改了清单以将 Class-Path 元素与所有 jar 一起添加到其中。然后第二个命令起作用。但是在我的代码中,我试图加载一个在命令提示符处提供名称的 aribtrary 类,因此我希望类路径包含文件夹中的所有 jar。如何使第二个命令在这种情况下工作?
【问题讨论】:
-
看看OneJar。这应该可以解决您的 CP 问题。
-
@flash:可能不会。他说他在编译时不知道额外的类路径(否则他可以将它添加到清单中)。
-
听起来你必须使用自己的类加载器(根据你的环境添加东西)。
-
@Thilo,是的,我需要在运行时使用加载其他类。从下面的响应中,看起来我需要使用 URLClassLoader 自己进行一些类加载。
-
另一种选择是使用批处理文件或其他类型的包装器(以便您可以使用通配符或程序化发现)。