Jar文件 - 找不到主类

时间:2017-07-06 19:50:28

标签: java jar build classpath mainclass

所以我有以下项目结构: 我有一个名为" com.github.liketechnik"的软件包。我的主要课程是Build in this package(" com.github.liketechnik.Build")。

我以编程方式将编译后的类放入带有正确清单的jar文件中,例如: G。包含版本属性和Main-Class条目" com.github.liketechnik.Build"。 jar中的类包含在" com / github / liketechnik / Build.class"中。

运行java -jar output.jar时,它直接失败:"错误:无法找到或加载Mainclass com.github.liketechnik.Build" (翻译自德语)。当直接通过java -cp build/main com.github.liketechnik.Build(例如直接在jar之外的类文件)运行类时,它没有问题。

我试过这个小时并且还搜索了每个文件的拼写错误,所以我感谢任何有关这个问题的帮助,因为所有其他有关此类问题的线程对我没有帮助。如果您需要更多信息或源代码,我可以毫不费力地给您。

编辑:添加了jar文件的结构。

jar文件具有以下结构:

  • 一个目录" META-INF"包含" MANIFEST.MF"提到的条目。

  • 一个dir结构" com / github / liketechnik / Build.class" (例如,包含其他类(在子包中)。

清单:

Manifest-Version: 1.0
Main-Class: com.github.liketechnik.Build

Build.java:

package com.github.liketechnik;

public class Build {

    public static void main(String[] args) {
        System.out.println("Hi");
    }
}

手动运行时输出:Hi(按预期方式) 从jar运行时输出:Fehler: Hauptklasse com.github.liketechnik.Build konnte nicht gefunden oder geladen werden(为什么?)

1 个答案:

答案 0 :(得分:0)

好吧,似乎以编程方式创建.jar档案并不像看起来那么容易。似乎需要处理的.zip规范(see this question)是另一个警告,因此需要在目录层次之后添加条目。

实施例: 假设您有包含文件a b的目录btest.classtoll.class,则必须先添加a,然后b然后是b内的文件。否则它将无法工作。