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

标签 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 没有包,但没有成功。

编辑

我通过使用 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/

相关文章:

java - Java 方法的最大大小

java - Android 滚动列表后会选择多个单选按钮。改变其状态

java - JDK7编译错误: Ambiguity reference

java - 优化使用 CPLEX Java 实现高吞吐量

java - JNIEnv->FindClass 返回 null OpenJDK 7,正确返回 Oracle JDK 8

scala - 如何从 shell 作为普通命令行程序运行 sbt 主类?

java - 配置 IntelliJ IDEA Ultimate 将 JAR 添加到类路径而不是 native 位置

java - 使用 Jsoup 构建基本程序

maven - 在文件中发布带有源代码的 Artifact

java - 如何创建一个 jar 。在类里面使用它。在命令行中使用 jar 执行类?