`

Jar 的 build 方法

    博客分类:
  • Java
阅读更多
\>jar cf jar-file input-file(s)
  /*
  说明,windows下和UNIX下对目录结构的分隔符习惯不同,前者为\,后者为/ ,本文仅仅为了说明问题,并不严格加以说明。——注意,无论任何平
台,在manifest文件中均采用/
  */
  /*
  该形式的命令在当前目录下创建一个jar-file
  c开关指明“创建”一个jar文件
  f开关指明输出到文件,而不是stdout(标准输出)
  jar-file如果不指明后缀,则默认为*.jar
  空格用于分隔多个输入文件,可以使用通配符“*”
  有必要时指明目录
  开关出现的顺序不重要,但是如果有m开关则另当别论。
  该命令默认创建一个manifest文件
  */
  /*
  对于java版本1,jar文件仅支持ASCII作文件名,java版本2则支持UTF-8编码的文件名。
  */
  /*
  关于创建,可用的其他开关:
  v 当jar文件创建时,在stderr(java版本1)或stdout(java版本2)产生冗余(verbose)输出。报告添加到jar的文件名录。
  0 (zero)指明不要压缩。
  M 指明不要产生默认的manifest文件。
  m 添加手工已编制好的manifest文件:
  \>jar cmf existing-manifest jar-file input-file(s)
  -C 在操作过程中转变目录(仅对java版本2)。
  */
  /*
  一个例子。
  假设,如下目录结构(windows下):
  TicTacToe\TicTacToe.class (文件)
  TicTacToe\audio (子目录,该层下全是au文件)
  TicTacToe\images (子目录,该层下全是gif文件)

  如果要将该东东压入jar文件TicTacToe.jar,应在TicTacToe目录中(!)执行下面命令:
  TicTacToe>jar cvf TicTacToe.jar TicTacToe.class audio images
  jar程序会自动将audio和images目录及其子目录一咕脑(recursively)全压入TicTacToe.jar文件,该文件将出现于  TicTacToe\TicTacToe.jar
  因为使用了verbose output开关,可以看到类似如下的输出:
  adding: TicTacToe.class (in=3825) (out=2222) (deflated 41%)
  adding: audio/ (in=0) (out=0) (stored 0%)
  adding: audio/beep.au (in=4032) (out=3572) (deflated 11%)
  adding: audio/ding.au (in=2566) (out=2055) (deflated 19%)
  adding: audio/return.au (in=6558) (out=4401) (deflated 32%)
  adding: audio/yahoo1.au (in=7834) (out=6985) (deflated 10%)
  adding: audio/yahoo2.au (in=7463) (out=4607) (deflated 38%)
  adding: images/ (in=0) (out=0) (stored 0%)
  adding: images/cross.gif (in=157) (out=160) (deflated -1%)
  adding: images/not.gif (in=158) (out=161) (deflated -1%)

  如果:
  TicTacToe>jar cvf0 TicTacToe.jar TicTacToe.class audio images
  则表示只备份不压缩。
 
  如果该目录内全是需要jar掉的文件及其相应目录结构:
  TicTacToe>jar cvf TicTacToe.jar *
  是比较简洁的写法。

  如果不特别使用开关m或M,默认的manifest文件将产生于
  META-INF/MANIFEST.MF

  继承了GZIP的特点,-C开关用于跳到某目录,以改变所存入jar文件的目录结构。多半用于将原来位于不同目录结构的文件作jar时聚合在一起。例如:
  TicTacToe>jar cf ImageAudio.jar -C images . -C audio .
  产生的jar文件内容和结构:
  META-INF/MANIFEST.MF
  cross.gif
  not.gif
  beep.au
  ding.au
  return.au
  yahoo1.au
  yahoo2.au
  (现在假设我们images子目录下还有子目录,像这样:
  TicTacToe\images\jpg
  jpg子目录下还有一些*.jpg文件那以上命令的结果应该是:
  META-INF/MANIFEST.MF
  jpg/AMAKUSA.jpg
  jpg/UKYO.jpg
  cross.gif
  not.gif
  beep.au
  ding.au
  return.au
  yahoo1.au
  yahoo2.au
  说明了-C的真正含义。
  )

  */
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics