尽管 .jar 包含这些文件,但在 .jar 文件中找不到 Main class
Main class not found in .jar file despite the .jar contains the files
我有一个 .jar
和一个我想访问的主要 class。但是,我一直没能做到。
我第一次尝试修改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 {};
}
原因是,您的 AddClass
继承自 com.mathworks...
class.. 但您没有将此 class 添加到 class 路径。要生成打包的 jar 文件,您需要使用特殊的 classloader,例如 onejar (http://one-jar.sourceforge.net/)。否则只需将缺少的罐子添加到 -cp
class 路径列表。
这里的示例不会抛出 ClassNotFound
异常,而是抛出 Main class cannot be found or loaded
错误。
- 编译class测试和Test2
- 从 class 路径中删除 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);
}
}
我有一个 .jar
和一个我想访问的主要 class。但是,我一直没能做到。
我第一次尝试修改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 {};
}
原因是,您的 AddClass
继承自 com.mathworks...
class.. 但您没有将此 class 添加到 class 路径。要生成打包的 jar 文件,您需要使用特殊的 classloader,例如 onejar (http://one-jar.sourceforge.net/)。否则只需将缺少的罐子添加到 -cp
class 路径列表。
这里的示例不会抛出 ClassNotFound
异常,而是抛出 Main class cannot be found or loaded
错误。
- 编译class测试和Test2
- 从 class 路径中删除 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);
}
}