【发布时间】:2019-08-18 17:08:14
【问题描述】:
我正在尝试创建一个 jar 并为包结构的 java 程序执行它。我能够创建 jar,但我正在执行它 抛出错误。
文件夹结构:Java_Example > pack > A.java
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
文件夹结构:Java_Example > mypack > B.java
package mypack;
import pack.*;
class B{
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
文件夹结构:Java_Example > bin > Manifest.txt
Mainfest-Version: 1.1
Main-Class: mypack.B
清单文件与换行符一起存在
从命令行执行
E:\Java_Example\bin>java -cp E:\Java_Example mypack.B
Hello
创建罐子
E:\Java_Example\bin>jar cvf MyJar.jar Manifest.txt E:\Java_Example\pack\A.clas
E:\Java_Example\mypack\B.class
added manifest
adding: Manifest.txt(in = 60) (out= 61)(deflated -1%)
adding: Java_Example/pack/A.class(in = 376) (out= 268)(deflated 28%)
adding: Java_Example/mypack/B.class(in = 307) (out= 237)(deflated 22%)
执行jar
E:\Java_Example\bin>jar -jar MyJar.jar
Illegal option: j
Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] f
iles ...
java -jar 命令执行
E:\Java_Example\bin>java -jar MyJar.jar
no main manifest attribute, in MyJar.jar
尝试通过提供主类来执行 Jar
E:\Java_Example\bin>jar -cp MyJar.jar mypack.B
Illegal option: p
Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] f
iles ...
jar -tf 输出
E:\Java_Example\bin>jar -tf MyJar.jar
META-INF/
META-INF/MANIFEST.MF
Manifest.txt
Java_Example/pack/A.class
Java_Example/mypack/B.class
【问题讨论】:
-
manifest 文件应该在
META-INF/MANIFEST.MF下,你能检查一下生成的jar 看看是不是这样吗? -
试试
java -jar MyJar.jar。 -
@RJB: 可以看到创建的 MANIFEST.MF 文件,我已经编辑了问题并添加了 -tf 输出..
-
@LutzHorn: java -jar 也抛出错误,我已经编辑了问题并粘贴了命令及其输出
-
“没有主清单属性”表示文件
META-INF/MANIFEST.MF中没有Main-Class- 它与Manifest.txt不同(位置错误,扩展名错误)。创建 jar 时添加--main-class=mypack.B或--manifest=Manifest.txt。 Documentation
标签: java jar executable-jar