我有一个 .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
没有包,但没有成功。
编辑
我通过使用 jar
命令解压并压缩 .jar
来修改 MANIFEST
。
如果我解压缩.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 {};
}
最佳答案
原因是,您的AddClass
继承自com.mathworks...
类。但是您没有将此类添加到类路径中。要生成打包的 jar 文件,您需要使用特殊的类加载器,例如 onejar ( http://one-jar.sourceforge.net/ )。否则,只需将缺少的 jar 添加到 -cp
类路径列表中。
这里的示例不会抛出 ClassNotFound
异常,但会抛出 无法找到或加载主类
错误。
- 编译类Test和Test2
- 从类路径中删除 Test2
- 运行
java -cp 。测试
主类将不会被加载。
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);
}
}
关于java - 尽管 .jar 包含文件,但在 .jar 文件中找不到主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147841/