进行JAR压缩时,参数“cvfm" 和"cvfe"的区别
2016-07-31 17:03
351 查看
初学java,在学习JAR压缩时,corejava教材中看似长篇大论,实讲没有讲清楚,这里作下笔记,说明实际使用中体会到的参数“cvfm" 和"cvfe"的区别:
两者主要区另在于"m"和"e":
cvfm用法如:jar cvfm Myprogram.jarResource.mf
*.class *.gif *.txt
其中Resource.mf 是人工按格式编写的manifest.mf类型清单文件,这里如果带有参数"m",则列出的第一个的文件必须是Resource.mf(文件名随意,后缀为.mf即可) ,而且在此文中必须指明主程序ResourceTest.class及主程序的包路径(如果有包),假如主程序在"package resource;"下,则在Resource.mf 中必须写明:Main-class:resource/ResourceTest(此处不能带.class)
否则在进行打包时会提示:invalid header field,按照本例情况,正确指令应该是:
jar cvfm Myprogram.jarresource/Resource.mf
resource/*.classresource/*.gif *resource/.txt
系统会直接将Resource.mf 文件中内容复制到打包中其中路径META-INF/manifest.mf文件中。
最后在生成的JAR压缩包中,被压缩的文件会放在resource文件夹中,即也会带上包路径进行复制和压缩。
另外:如果在resource中还想把Resource.mf文件也压进去,则在指令最后还要再加上resource/Resource.mf即可。
格式为:jar cvfm Myprogram.jarresource/Resource.mf resource/*.class
resource/*.gif *resource/.txt
resource/Resource.mf
cvfe用法如:jar cvfe Myprogram.jarresource/ResourceTest *.class
*.gif *.txt
这种情况下,e代表会根据第一个文件名(必须为主程序的文件名,不带.class后缀),此例中为resource/ResourceTest 则系统会自动在打包中创建META-INF/manifest.mf文件并把Main-class:resource/ResourceTest复制进去,这个路径如果填得不对,那么复制进去的路径就是错的,导致压缩成功后再执行时,会无反应。
总结:参数m是采用复制自编的
.mf文件内容的形式,参数e则是采用复制指令中的主程序文件名的形式,如果主程序在package中,对不管哪种参数,对应的包路径都要带齐。两个参数,只是实现形式不一样,但目的都是为了把主程序入口信息放入META-INF/manifest.mf文件中,另[b]META-INF/manifest.mf文件是在JAR打包过程中,系统自己创建的目录,文件manifest.mf中专门用来存放主程序入口信息及其他文件清单信息,打包完成后,在执行打包文件时,系统会读取[b]META-INF/manifest.mf文件中的主程序入口信息,根据主程序名.class进行响应,如果一开始给的主程序入口信息是错误的,那么即使打包成功了,在后续执行打包文件时也会无响应或是无法访问。[/b][/b]
两者主要区另在于"m"和"e":
cvfm用法如:jar cvfm Myprogram.jarResource.mf
*.class *.gif *.txt
其中Resource.mf 是人工按格式编写的manifest.mf类型清单文件,这里如果带有参数"m",则列出的第一个的文件必须是Resource.mf(文件名随意,后缀为.mf即可) ,而且在此文中必须指明主程序ResourceTest.class及主程序的包路径(如果有包),假如主程序在"package resource;"下,则在Resource.mf 中必须写明:Main-class:resource/ResourceTest(此处不能带.class)
否则在进行打包时会提示:invalid header field,按照本例情况,正确指令应该是:
jar cvfm Myprogram.jarresource/Resource.mf
resource/*.classresource/*.gif *resource/.txt
系统会直接将Resource.mf 文件中内容复制到打包中其中路径META-INF/manifest.mf文件中。
最后在生成的JAR压缩包中,被压缩的文件会放在resource文件夹中,即也会带上包路径进行复制和压缩。
另外:如果在resource中还想把Resource.mf文件也压进去,则在指令最后还要再加上resource/Resource.mf即可。
格式为:jar cvfm Myprogram.jarresource/Resource.mf resource/*.class
resource/*.gif *resource/.txt
resource/Resource.mf
cvfe用法如:jar cvfe Myprogram.jarresource/ResourceTest *.class
*.gif *.txt
这种情况下,e代表会根据第一个文件名(必须为主程序的文件名,不带.class后缀),此例中为resource/ResourceTest 则系统会自动在打包中创建META-INF/manifest.mf文件并把Main-class:resource/ResourceTest复制进去,这个路径如果填得不对,那么复制进去的路径就是错的,导致压缩成功后再执行时,会无反应。
总结:参数m是采用复制自编的
.mf文件内容的形式,参数e则是采用复制指令中的主程序文件名的形式,如果主程序在package中,对不管哪种参数,对应的包路径都要带齐。两个参数,只是实现形式不一样,但目的都是为了把主程序入口信息放入META-INF/manifest.mf文件中,另[b]META-INF/manifest.mf文件是在JAR打包过程中,系统自己创建的目录,文件manifest.mf中专门用来存放主程序入口信息及其他文件清单信息,打包完成后,在执行打包文件时,系统会读取[b]META-INF/manifest.mf文件中的主程序入口信息,根据主程序名.class进行响应,如果一开始给的主程序入口信息是错误的,那么即使打包成功了,在后续执行打包文件时也会无响应或是无法访问。[/b][/b]
相关文章推荐
- 函数参数为 "char* p" 与 "char*& p" 的区别
- C语言中值得深入知识点----数组做函数参数、数组名a与&a区别、数组名a的"数据类型"
- C++的基础知识(十一)--数组做函数参数、数组名a与&a区别、数组名a的"数据类型"
- string类型的" "、String.Empty、null三者间的区别
- 解决问题:vs 使用命令行参数调试时出现"当前项目设置指定将使用特定的安全权限对该项目进行调试.在此模式下,命令行参数将不会传递给可执行文件."
- "==" 和 equals方法的区别
- 转 未能使用提供程序 "RsaProtectedConfigurationProvider" 进行解密 的解决办法
- makecab cabwiz 制作PPC中文程序名的安装包;makecab中利用参数设置不压缩,设置带文件夹进行压缩
- "爱说说"技术原理:前后台参数约定及逻辑代码(三)
- "余额方式"与"明细方式"进行结转
- [转]关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- "以前进行的程序安装创建了挂起的文件操作。运行程序之前,必须重新起动计算机。"的解决办法
- asp+sql的存储过程出错"800a0bb9 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。"
- 未能使用提供程序 "RsaProtectedConfigurationProvider" 进行解密 的解决办法
- "=="和equals方法究竟有什么区别
- C# 自己写的一个类,用来将结构体或类中的数据打成"数据包",进行网络发送(转载)
- 使用未写入文档参数"_ALLOW_RESETLOGS_CORRUPTION"进行崩溃恢复经典
- 因为不想再程序中写循环,因此把UI页面需要更新的纪录的主键组成了一个以","隔开的字符串,将这个字符串传入存储过程中进行处理(转)
- "推技术"与"拉技术"的区别
- vi保存退出":x"与":wq"的区别