资讯专栏INFORMATION COLUMN

java jar打包总结(二)

Mr_houzi / 2000人阅读

摘要:前言昨天总结了使用进行打包今天说一下命令行下使用命令进行打包。在命令行下打包需要比使用这些成熟的工具更需要注意一些东西,但打包和使用总体来说都不算太复杂,下面慢慢讲述。第三行指定主类所在类路径。第四行指明程序运行的主类。

前言

昨天总结了使用eclipse进行jar打包,今天说一下命令行下使用jar命令进行打包。

在命令行下打包jar需要比使用eclipse这些成熟的工具更需要注意一些东西,但打包jar和使用jar总体来说都不算太复杂,下面慢慢讲述。

jar命令的基本格式

在命令行中输入jar,查看jar命令的基本格式。

用法: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file]
 [entry-point] [-C dir] files ...

选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为绑定到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 "m", "f" 和 "e" 标记的指定顺序相同。
       

{}内的ctxui是必需参数,其后的参数是可选参数,由其自身的提示可知,清单文件(manifest-file),档案文件(jar-file),入口点(entry-point)分别要对应你参数选择时m,f,e对应的位置

比如说,你的命令是jar cfm var1 var2那么var1对应的就是参数f,需要你打包后jar文件的名字 var2就是指清单文件对应参数m。

这个清单文件的作用类似于起到了配置的作用,如果你打开过jar文件的内容后,你会发现在里面有一个文件夹META-INF,在其中就是这个清单文件。

用记事本打开该文件,你会发现只有一行的

Manifest-Version: 1.0  

这是由于你创建时,没有指定manifest而由java自动生成的。如果需要指定manifest,则可以创建一个menifest文件,注意没有后缀哦。

可以填写的选择有

Manifest-Version: 1.0  
Created-By: fat-rabbit 
Class-Path: .  
Main-Class: Main  

说明:
  第一行指定清单的版本,若无,则JDK默认生成:Manifest-Version: 1.0。
  第二行指明创建的作者,若无,则JDK默认生成Created-By: 1.6.0_22(Sun Microsystems Inc.)。
  第三行指定主类所在类路径。
  第四行指明程序运行的主类。构建可执行jar文件的需要填写。
  注意在末尾有一个空行。
在命令行下使用jar命令进行打包

一般来说,在命令行下进行打包的命令基础的无非两种。

一种是无指定manifest文件

jar cvf classes.jar Foo.class Bar.class
//将Foo.class和Bar.class 打包成classer.jar文件,并在在标准输出中生成详细输出

jar cvf classes.jar -C foo/ .
//将 foo/ 目录中的所有文件归档到 classes.jar 中,并在在标准输出中生成详细输出

另一种是指定了manifest文件

jar cvfm classes.jar mymanifest Foo.class Bar.class
// 将Foo.class和Bar.class 打包成classer.jar文件,
// 并在在标准输出中生成详细输出,以及使用指定好的mymanifest文件

jar cvfm classes.jar -C foo/ .
// 将 foo/ 目录中的所有文件归档到 classes.jar 中,
// 并在在标准输出中生成详细输出,以及使用指定好的mymanifest文件

其余的参数可以按需组合,这里不一一解说。

在命令行下编译带有第三方jar的java文件

如果直接编译带有第三方jar的java文件会提示找不到程序包。

这时则需要使用-cp命令将jar文件添加进classpath里,多个程序包用 ; 隔开(传完呢linux下是冒号,我没试过)。即:

javac -cp aaaA.jar;bbbB.jar yourJavaName.java
//补充一点,若A只是一个目录,则只需javac -cp aaa yourJavaName.java即可
总结

这两篇文章总结的可以完成一些普通的打包工作了,如果需要更复杂的打包,可以翻阅专业的资料,jar打包和python打包不同,因为其应用场合的关系,python少有打包成exe发布,虽然sublime-Text是用python写的,但更多时候python是用作服务端的一些工作,而java的各种应用场合都几乎需要用到jar打包技术,所以建议和我一样的新人要对其有一定的认识。

文章中若有错误,欢迎指正

最后推荐几篇文章

文章1
文章2

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65481.html

相关文章

  • java jar打包使用总结(一)

    摘要:背景介绍将程序打包,无论是为了代码复用,还是发布应用,都是必不可少的的技能,上次总结了一下利用打包成,这次我来说如何打包。导入往往我们使用打包不只是为了双击使用,有时也是为了代码复用。碍于时间关系,将留待下一篇文章进行总结。 背景介绍 将程序打包,无论是为了代码复用,还是发布应用,都是必不可少的的技能,上次总结了一下python利用cxfreeze打包成exe,这次我来说java如何打...

    Blackjun 评论0 收藏0
  • 在pyspark中调用scala代码

    摘要:由于使用的是天河二号,版本是,同样,所以获取主题时还不能使用在中才开放对的接口,只能使用的方法。本来做并行化就是希望效率更高,却在调用代码,同时进行了很多数据转换。 在pyspark中调用scala代码 情境说明 问题 我们这边是要使用Spark去并行一个自然语言处理的算法,其中使用到了LDA主题模型。由于使用的是天河二号,Spark版本是1.5.1,pyspark同样,所以获取主题时...

    alanoddsoff 评论0 收藏0
  • Maven 常用技巧总结

    摘要:用于将集成至标准的构建生命周期中,此时执行时就会执行指定的操作,从而实现自定义打包。插件的已弃用会自动执行生命周期。可执行文件执行时出现乱码使用生成的可执行文件,在中执行时出现乱码,项目编码统一为,日志使用框架。得到的是当前的绝对路径。 「博客搬家」 原地址: 简书 原发表时间: 2017-04-06 1. 设置 Java JDK 的版本为「JDK 1.8」 可以修改 pom.x...

    niceforbear 评论0 收藏0
  • 慕课网_《新一代构建工具gradle》学习总结

    摘要:时间年月日星期二说明本文部分内容均来自慕课网。项目一个项目代表一个正在构建的组件比如一个文件,当构建启动后,会基于实例化一个类,并且能够通过变量使其隐式可用。任务动作定义了一个最小的工作单元。 时间:2017年05月16日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:无个人学习源码:https://github.com/zccod...

    antyiwei 评论0 收藏0
  • maven工程打包jar以及java jar命令的classpath使用

    摘要:二打包完工程的和依赖都在同一目录。此时,运行的命令,直接运行包即可。这个时候,容易想当然,把命令错误的写成错误展示实际上正确的写法应该是通过指定当前目录的方式,可以缩写为三如果运行的和依赖不在同一目录。 一、maven工程打包成jar文件插件。 org.apache.maven.plugins maven-jar-plugin 2.3....

    starsfun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<