包结构的 Jar 执行错误
Jar execution error for package structure
我正在尝试创建一个 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
创建 Jar
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
尝试通过给定 main class
来执行 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
您不能使用 jar
命令 运行 jar,请改用 java
。对于您编辑的问题,清单不在正确的位置。查看 jar 提取的输出:
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.txt
,清单是MANIFEST.MF
您构建的 jar 文件有误。从基本文件夹执行此操作,并添加 m
选项以指定您在 jar 文件名之后立即列出清单文件(因为 f
在 m
之前)。
E:\Java_Example>jar cvfm MyJar.jar bin\Manifest.txt pack\A.class mypack\B.class
added manifest
adding: pack/A.class(in = 376) (out= 268)(deflated 28%)
adding: mypack/B.class(in = 307) (out= 237)(deflated 22%)
如您所见,class 文件现在已正确限定,它没有说 adding: Manifest.txt
因为该文件现在是 manifest
.
现在你运行像这样:
java -jar MyJar.jar
如果你想要 bin 文件夹中的 jar 文件,你当然只需符合条件:
E:\Java_Example>jar cvfm bin\MyJar.jar bin\Manifest.txt pack\A.class mypack\B.class
E:\Java_Example>java -jar bin\MyJar.jar
我正在尝试创建一个 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
创建 Jar
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
尝试通过给定 main class
来执行 JarE:\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
您不能使用 jar
命令 运行 jar,请改用 java
。对于您编辑的问题,清单不在正确的位置。查看 jar 提取的输出:
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.txt
,清单是MANIFEST.MF
您构建的 jar 文件有误。从基本文件夹执行此操作,并添加 m
选项以指定您在 jar 文件名之后立即列出清单文件(因为 f
在 m
之前)。
E:\Java_Example>jar cvfm MyJar.jar bin\Manifest.txt pack\A.class mypack\B.class
added manifest
adding: pack/A.class(in = 376) (out= 268)(deflated 28%)
adding: mypack/B.class(in = 307) (out= 237)(deflated 22%)
如您所见,class 文件现在已正确限定,它没有说 adding: Manifest.txt
因为该文件现在是 manifest
.
现在你运行像这样:
java -jar MyJar.jar
如果你想要 bin 文件夹中的 jar 文件,你当然只需符合条件:
E:\Java_Example>jar cvfm bin\MyJar.jar bin\Manifest.txt pack\A.class mypack\B.class
E:\Java_Example>java -jar bin\MyJar.jar