所以我有以下项目结构: 我有一个名为" 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
(为什么?)
答案 0 :(得分:0)
好吧,似乎以编程方式创建.jar档案并不像看起来那么容易。似乎需要处理的.zip规范(see this question)是另一个警告,因此需要在目录层次之后添加条目。
实施例:
假设您有包含文件a
b
的目录b
和test.class
,toll.class
,则必须先添加a
,然后b
然后是b
内的文件。否则它将无法工作。