我正试图获得一个在CLI上执行的简单JAR文件(没有清单)。文件夹结构如下:
modsun.jar
outtestMain.class
srctestMain.java
这是Main.java
:
package test;
public class Main{
public static void main(String []args){
System.out.println("Unnamed module...");
}
}
以下是根文件夹中的命令:
javac -d out srcMain.java
java -cp out test.Main - this works
jar -cvf modsun.jar outtestMain.class
java -cp modsun.jar;out test.Main - works (when 'out' is in classpath)
java -cp modsun.jar test.Main - ERROR
最后一行生成错误:
Error: Could not find or load main class test.Main
Caused by: java.lang.ClassNotFoundException: test.Main
我看过JAR zip,它看起来不错。MANIFEST.MF是默认的,但这还可以,因为我明确地告诉Java从哪个类开始(main()的类)。内容为:
META-INFMANIFEST.MF
outtestMain.class
清单本身是:
Manifest-Version: 1.0
Created-By: 11 (Oracle Corporation)
所以看起来JAR中的类文件根本没有被拾取。如果我在运行java
时省略了out
文件夹,或者如果我重命名了out
文件夹中的.class
文件),我会得到未找到类的错误。我想让它在没有舱单的情况下工作。
有什么想法吗?
谢谢,Seán。
您需要更改到'out'目录才能在jar中获得正确的包根目录:
jar -cvf modsun.jar -C out testMain.class