【问题标题】:Why am I getting this weird output when creating a JAR file from commandline?为什么从命令行创建 JAR 文件时会得到这个奇怪的输出?
【发布时间】:2016-08-24 03:33:51
【问题描述】:

我在文件夹“D:\Workspaces\Workspace\Packaging Programs into JAR Files\src”中编写了一个 HelloWorld 类。我正在尝试创建一个包含此 HelloWorld.class 文件的 Jar 文件,遵循this tutorial。于是我在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$2å╛⌂
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 cf,而不是jar cv
  • 为什么要将 JAR 存档输出到系统输出?
  • f 写入的文件是 jar。通过键入jar cv 而不是jar cf,您告诉它通过命令提示符输出jar 的内容而不是将其写入文件。由于它不打算以纯文本形式显示,所以当您告诉计算机以这种方式显示时,您会得到一堆乱七八糟的字符。
  • JAR 命令行工具旨在(我相信)用于创建 JAR 文件。如果要将 JAR 文件通过管道传输到其他输出流,从 Java 程序中很容易做到。
  • 没问题。很高兴我能帮上忙!

标签: java command-line jar command-line-arguments executable-jar


【解决方案1】:

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

jar cvf HelloWorld.jar HelloWorld.class

更新:

您可以通过告诉 JAR 将输出发送到标准输出,然后重定向到您想要的实际 JAR 文件来实现与上述相同的结果。因此,以下将完成与上述相同的操作:

jar cv HelloWorld.class > HelloWorld.jar

需要注意的是,将 JAR 中的输出通过管道传输到输出文件中是操作系统的一项功能,而不是 Java 的一项功能。

【讨论】:

  • 感谢您的回答。但是从我在问题中链接到的文档中,“f 选项表示您希望输出转到文件而不是标准输出。” - 但是如果我不关心文件并且确实希望输出转到输出流怎么办?我正在学习并想分别尝试每个选项,以便我很好地理解它。
猜你喜欢
  • 2015-04-28
  • 2013-04-29
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 2016-04-13
  • 1970-01-01
相关资源
最近更新 更多