从jar文件中,从jar外部实现类的类调用main方法

时间:2015-06-05 22:24:20

标签: java jar main

假设我有一个名为'MyJar.jar'的jar文件,其类定义如下:

import SomeInterface;

public class MyClass implements SomeInterface {
   static public void main ( String args[] ) {
     ...
   }
}

但请注意,接口'SomeInterface'不在jar文件中。而是在另一个名为'SomeJar.jar'的jar文件中引用它

我的manifest-mf文件确实包含以下内容:

Main-Class: MyClass

现在,假设我尝试使用看似可行的语法,在我的jar文件中运行'myClass'类的'main'方法,即:

java -cp SomeJar.jar -jar MyJar.jar

在这种情况下,我会得到类似的内容:

Error: Could not find or load main class MyClass

但是,如果我重写这样的语法,一切正常:

java -cp SomeJar.jar;MyJar.jar MyClass

为了进行健全性检查,我确实使用具有适当清单文件条目的“HelloWorld”类进行了前一次调用,并且该方法有效。似乎只有当有问题的类实现了一个不能立即用于jar文件的接口,而是存在于它之外的接口时,才会出现此问题。 (这也可能发生在同一个类上,但我还没有检查过)正如你所看到的,我可以让事情有效......只是没有我认为可行的'java -jar'语法。另外,使用前一种方式,我不会得到“NoClassDefFoundError”错误(我认为我会这样),无论我是否在“java -jar”调用中包含“-cp”类路径。

任何想法为什么前“java -jar”调用不起作用(并且似乎没有给出任何好的错误,为什么它不起作用)而后者“java”调用工作正常?

1 个答案:

答案 0 :(得分:1)

-cp-jar选项都设置(而不是追加)基础类路径。命令行最后一个选项将覆盖所有以前的-cp-jar选项。