尽管.jar包含文件,但在.jar文件中找不到主类

时间:2015-06-30 20:23:15

标签: java jar classpath

我有一个.jar,其中包含我想要访问的主类。但是,我无法这样做。

我首先尝试修改MANIFEST,但java总是抱怨

Error: Could not find or load main class

所以我直接开始使用这样的-classpath标志:

java -classpath add2.jar add2.AddClass

然而,它仍然给我同样的错误。 如果我jar tvf add2.jar它会给我以下输出:

     0 Tue Jun 30 11:49:48 COT 2015 META-INF/
    95 Tue Jun 30 11:49:48 COT 2015 META-INF/MANIFEST.MF
     0 Fri Dec 05 09:09:22 COT 2014 add2/
169482 Fri Dec 05 09:09:18 COT 2014 add2/add2.ctf
  1786 Fri Dec 05 09:09:22 COT 2014 add2/Add2MCRFactory.class
  3848 Fri Dec 05 09:09:22 COT 2014 add2/AddClass.class
   318 Fri Dec 05 09:09:22 COT 2014 add2/AddClassRemote.class
 12288 Tue Jun 30 11:49:44 COT 2015 META-INF/.MANIFEST.MF.swp

所以我怀疑add2.AddClass实际存在。我也尝试了AddClass没有包裹,没有运气。

修改

我通过使用MANIFEST命令解压缩.jar来修改jar

如果我解压缩.jar。并执行javap add2/AddClass.class我会得到:

Compiled from "AddClass.java"
public class add2.AddClass extends com.mathworks.toolbox.javabuilder.internal.MWComponentInstance<add2.AddClass> {
    public add2.AddClass() throws com.mathworks.toolbox.javabuilder.MWException;
    ...
    public static void main(java.lang.String[]);
    ...
    static {};
}

1 个答案:

答案 0 :(得分:2)

原因是,您的AddClass继承自com.mathworks...类..但您没有将此类添加到类路径中。要生成打包的jar文件,您需要使用像onejar(http://one-jar.sourceforge.net/)这样的特殊类加载器。否则只需将缺少的jar添加到-cp类路径列表中。

这里的示例不会抛出ClassNotFound异常,而是Main class cannot be found or loaded错误。

  • 编译类Test和Test2
  • 从类路径中删除Test2
  • 运行java -cp . Test

不会加载Mainclass。

import bla.Test2;

public class Test extends Test2 {

    public static void main(String[] args) {
        String test = "TEST1";

        System.out.println(test);

    }
}

Test2.java

的位置
package bla;

public class Test2 {
    public Test2() {
        String test = "TEST2";

        System.out.println(test);
    }
}