【发布时间】:2017-03-25 22:33:23
【问题描述】:
在使用命令行编译 Java jar 文件时遇到一些技术问题。
我在同一个目录中有这两个 .java 文件
// 源码.java
package home;
public class Source {
public Source(){
System.out.println("This is the source.");
}
public static void main(String[] s){
System.out.println("this is England.");
System.out.println("ok 1 - Input file close");
new Source();
new Other();
System.exit(3);
}
}
// 其他.java
package home;
public class Other {
public Other(){
System.out.println("More source here.");
}
}
我将这两个文件编译成一个 .jar 文件,如下所示:
#!/usr/bin/env bash
javac $(dirname "$0")/*.java
jar cmf MyJar.jar Manifest.txt *.class
Manifest.txt 文件只包含以下三行:
Manifest-Version: 1.0
Created-By: <Your info>
Main-Class: home.Source
但是,当我尝试使用以下命令执行 jar 文件时:
#!/usr/bin/env bash
java -jar MyJar.jar
我收到此错误:
Error: Could not find or load main class home.Source
我现在不知道该怎么办。有谁知道怎么了?也许我使用了错误的命令来生成 .jar 文件?
作为检查,我运行jar tf:
bash-3.2$ jar tf MyJar.jar
META-INF/
META-INF/MANIFEST.MF
Other.class
Source.class
【问题讨论】:
-
您可以执行
jar tf MyJar.jar并确认清单确实在jar 中并且在正确的路径中吗? -
我刚刚在这里读到stackoverflow.com/a/17097535/3858121,您可能需要在清单文件后添加一个空行,否则无法正确解析
-
@Japu_D_Cret 谢谢我运行了检查,看起来没问题,我更新了问题
标签: java jar executable-jar