从命令行创建 JAR 文件时,为什么我会得到这个奇怪的输出?

Why am I getting this weird output when creating a JAR file from commandline?

我在文件夹 "D:\Workspaces\Workspace\Packaging Programs into JAR Files\src" 中写了一个 HelloWorld class。我正在尝试在 this tutorial 之后创建一个包含此 HelloWorld.class 文件的 Jar 文件。于是我在src目录下打开cmd,执行了如下命令

jar cv HelloWorld.jar HelloWorld.class

我知道了:

D:\Workspaces\Workspace\Packaging Programs i
nto JAR Files\src>jar cv HelloWorld.jar HelloWorld.class
HelloWorld.jar : no such file or directory
 δ╗£H                    ♦ META-INF/■╩  ♥     ☻       PK♥ δ╗£H            ¶   ME
K-*╬╠╧│R0╘3ασr.JM,IM╤u¬♦        ÿδ↓─¢[*h°↨%&τñ*8τ↨§Σ↨%û òk≥r±r☺ P╖îqëC   D   PK♥
 c╖£H            ►   HelloWorld.classmPMK├@►}█|515╡╡⌡│P☼B¶1ŧ/éx(*D⌠α)iù▓%╔JL¶⌂û
▲¶<°♥ⁿQΓl¶é╨à▌Ö}≤▐╠█²·■°♦päü♥‼₧ì6VÜΦ8Φb╒B╧Bƒ┴<▬Ö(N↑4⌂∩åA?òS╬αìE╞/╩4µ∙u¶'äΦiå╛⌂
7₧GÅQÉD┘ï\d│æ↕:í,≤      ?‼è∞¥≤$æ╖2Oªçèφ┬B╙┬Üïul0┤¬≥┴≡I◄v,l║╪┬6⌡¿e♀φz╠e<τôΓ▼¶>?¶<
┌d∟♀6e♥èîó▒*♫÷B ↓ª╙¼@EYé√G▌%⌐BφW4:┌←⌠ÜεT]5Ω¬‼╥¬ª,* P♥   èY!☺  ⌐☺  PK δ╗£H    ☻
         ♦               META-INF/■╩  PK☺☻¶ δ╗£H╖îqëC   D   ¶             =   ME
TA-INF/MANIFEST.MFPK☺☻¶ c╖£H♥   èY!☺  ⌐☺  ►             ┬   HelloWorld.classPK♣♠
    ♥ ♥ ╗   !☻
D:\Workspaces\Workspace\Packaging Programs i
nto JAR Files\src>

为什么会这样?我弄错了吗?

您缺少告诉 JAR 工具输出到文件而不是控制台的 -f 参数:

jar cvf HelloWorld.jar HelloWorld.class

更新:

通过告诉 JAR 将输出发送到标准输出,然后重定向到实际的 JAR,

在没有 -f 标志的情况下,您可以获得与上面相同的结果你想要的文件。因此,以下将完成与上面相同的操作:

jar cv HelloWorld.class > HelloWorld.jar

应该注意的是,将 JAR 的输出通过管道传输到输出文件是 OS 的一个功能,而不是 Java 的一个功能。