- 浏览: 369598 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
JAVA jar打包时MANIFEST.MF格式约定
http://www.thinksaas.cn/topics/0/340/340208.html
在上面内容中注意几点:
1、Main-Class: com.lwf.main.TestMain与Class-Path:之间不能有空格,写的时候把Main-Class: com.lwf.main.TestMain写完后直接回车接着写Class-Path:。
2、Main-Class:后面有个空格再写内容com.lwf.main.TestMain
3、Class-Path: ./JAR/lib/lwf.jar ./JAR/lib/tt.jar这一行中,不同lib中间有一个空格,最后一个jar写完后要回车
java中的manifest文件格式
http://huanghuizz.iteye.com/blog/503932
在打jar包时,我们有时需要对manifest文件进行描述,在这里记录manifest相关的格式,以供日后参考。
manifest基本格式:
manifest 文件的格式 是很简单的,每一行都是 名-值 对应的:属性名开头,接着是 ":" ,然后是属性值,每行最多72个字符,如果需要增加,你可以在下一行续行,续行以空格开头,以空格开头的行都会被视为前一行的续行,所有在开头的属性都是全局的。
有main函数的jar包的manifest的格式:
Manifest-Version:1.0
Created-By:1.5.08 (Sun Microsystems Inc.)
Main-Class: com.pantosoft.impdb.ImpMain
Manifest-Version表示使用1.0的manifest文件
Created-By表示使用了的sun的1.5.08的jar生成
Main-Class表示有主函数的类
基于其他jar并有main函数的manifest的格式:
Manifest-Version:1.0
Created-By:1.5.08 (Sun Microsystems Inc.)
Main-Class: com.pantosoft.impdb.ImpMain
Class-Path:mail.jar activation.jar
Class-Path表示基于其他的2个jar包,并且以空格隔开表示有个jar包。如有路径,侧表示如下:
Class-Path:ext/mail.jar ext/activation.jar
基于其他jar并有多个main函数的manifest的格式:
还有一种Multiple Main Classes情况,如果你的应用程序可能有命令行版本和GUI版本,或者一些不同的应用共享很多相同的代码,这时你可能有多个Main Class,我们建议你采取这样的策略:把共享的类打成lib包,然后把不同的应用打成不 同的包,分别标志主类:如下
在 impDB.jar 和 ExpDB.jar 的manifest文件中分别注明各自的 Main Class
Package Versioning:
完成发布后,如果使用者想了解 ,哪些代码是谁的?目前是什么版本?使用什么版本的类库?解决的方法很多,manifest提供了一个较好的方法,你可以在manifest文件中描述每一个包的信息。Java 秉承了实现说明与描述分离的原则,package 的描述 定义了package 是什么,实现说明定义了谁提供了描述的实现,描述和实现包含名、版本号和提供者。要得到这些信息,可以查看JVM的系统属性(使用 java.lang.System.getProperty() )在manifest文件中,我可以为每个package定义描述和实现版本,声明名字,并加入描述属性和实现属性,这些属性是:
Specification-Title
Specification-Version
Specification-Vendor
Implementation-Title
Implementation-Version
Implementation-Vendor
当要提供一个类库或编程接口时,描述信息显得是很重要,见以下范例:
Package Version 查询:
在manifest文件中加入package描述后,就可以使用Java提供的java.lang.Package class进行Package 的信息查询,这里列举3个最基本的获取package object的方法:
1.Package.getPackages():返回系统中所有定义的package列表
2.Package.getPackage(String packagename):按名返回package
3.Class.getPackage():返回给定class所在的package
使用这方法就可以动态的获取package信息. 需要注意的是如果给定的package中没有class被加载,则也无法获得package 对象
Manifest 技巧:
多个.class 打包成 .jar
http://blog.csdn.net/FG2006/article/details/5820876
Java jar命令
比如您的class包存放路径为 d:/com/demo (demo是个目录,下面含有子文件夹及class文件)
具体操作如下:
1、打开dos窗口,进入demo目录
2、执行 jar cvf demo.jar * 回车
3、在demo目录下面你会发现demo.jar
具体参数请看下面的解释:
清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。
示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中:
示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有文件存档到一个名为 'classes.jar' 的存档文件中:
来个小例子试试看:
我们只有一个HelloWorld,如下:
将这个java文件存到C盘跟目录下,ok,接下来,
在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar cvf hello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错 hello.jar 。
基本的步骤我们现在都知道了,你可以自己去尝试一下随着jar后面的参数的不同,结果有什么变化。
紧接着我们看看如何运行我们的jar包。
在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢,META-INF目录?再看看里面是什么,还有一个MANIFEST.MF文件是不是?用文本编辑器(我这里是UltraEdit)打开它看看:
就是这样。这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行)。这个就是我们之前写的那个类,也就是我们的入口类。也即,
接下来,我们在命令提示符里执行:
jar umf MANIFEST.MF app.jar (应该是hello.jar吧)
这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class: HelloWorld这一句。 (是吗,我怎么没试出来,提示java.io.FileNotFoundException:MANIFEST.MF(系统找不到指定的文件)怎么回事?)
Ok,这个最后的一步了,来验证我们做的一切,在命令提示符中输入:
出现了什么, Hi, Hello World!
我们再来看看jar文件在tomcat中发布,注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的:
先准备我们要打包的资源。
找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello,再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml。Ok,目前我们初步建立了一个简单的web应用。
如果运行机上装有中文版WinRaR解压软件,并且将.jar文件与该软件
作了关联,那么双击.jar文件时相当与解压,这样便无法运行java程
序,这时就需要再编写一个.bat文件,内容如下:
javaw -jar Tom.jar
这时只要运行.bat文件就可以了。
http://www.thinksaas.cn/topics/0/340/340208.html
Manifest-Version: 1.0 Created-By: Fat Jar Eclipse Plug-In Main-Class: com.lwf.main.TestMain Class-Path: ./JAR/lib/lwf.jar ./JAR/lib/tt.jar
在上面内容中注意几点:
1、Main-Class: com.lwf.main.TestMain与Class-Path:之间不能有空格,写的时候把Main-Class: com.lwf.main.TestMain写完后直接回车接着写Class-Path:。
2、Main-Class:后面有个空格再写内容com.lwf.main.TestMain
3、Class-Path: ./JAR/lib/lwf.jar ./JAR/lib/tt.jar这一行中,不同lib中间有一个空格,最后一个jar写完后要回车
java中的manifest文件格式
http://huanghuizz.iteye.com/blog/503932
在打jar包时,我们有时需要对manifest文件进行描述,在这里记录manifest相关的格式,以供日后参考。
manifest基本格式:
manifest 文件的格式 是很简单的,每一行都是 名-值 对应的:属性名开头,接着是 ":" ,然后是属性值,每行最多72个字符,如果需要增加,你可以在下一行续行,续行以空格开头,以空格开头的行都会被视为前一行的续行,所有在开头的属性都是全局的。
有main函数的jar包的manifest的格式:
Manifest-Version:1.0
Created-By:1.5.08 (Sun Microsystems Inc.)
Main-Class: com.pantosoft.impdb.ImpMain
Manifest-Version表示使用1.0的manifest文件
Created-By表示使用了的sun的1.5.08的jar生成
Main-Class表示有主函数的类
基于其他jar并有main函数的manifest的格式:
Manifest-Version:1.0
Created-By:1.5.08 (Sun Microsystems Inc.)
Main-Class: com.pantosoft.impdb.ImpMain
Class-Path:mail.jar activation.jar
Class-Path表示基于其他的2个jar包,并且以空格隔开表示有个jar包。如有路径,侧表示如下:
Class-Path:ext/mail.jar ext/activation.jar
基于其他jar并有多个main函数的manifest的格式:
还有一种Multiple Main Classes情况,如果你的应用程序可能有命令行版本和GUI版本,或者一些不同的应用共享很多相同的代码,这时你可能有多个Main Class,我们建议你采取这样的策略:把共享的类打成lib包,然后把不同的应用打成不 同的包,分别标志主类:如下
Manifest for impDB.jar : Manifest-Version:1.0 Created-By:1.5.08 (Sun Microsystems Inc.) Class-Path:mail.jar activation.jar Manifest for impDB.jar : Manifest-Version:1.0 Created-By:1.5.08 (Sun Microsystems Inc.) Class-Path:impDB.jar Main-Class: com.pantosoft.impdb.ImpMain Manifest for ExpDB.jar : Manifest-Version:1.0 Created-By:1.5.08 (Sun Microsystems Inc.) Class-Path:expDB.jar Main-Class: com.pantosoft.impdb.ExpMain
在 impDB.jar 和 ExpDB.jar 的manifest文件中分别注明各自的 Main Class
Package Versioning:
完成发布后,如果使用者想了解 ,哪些代码是谁的?目前是什么版本?使用什么版本的类库?解决的方法很多,manifest提供了一个较好的方法,你可以在manifest文件中描述每一个包的信息。Java 秉承了实现说明与描述分离的原则,package 的描述 定义了package 是什么,实现说明定义了谁提供了描述的实现,描述和实现包含名、版本号和提供者。要得到这些信息,可以查看JVM的系统属性(使用 java.lang.System.getProperty() )在manifest文件中,我可以为每个package定义描述和实现版本,声明名字,并加入描述属性和实现属性,这些属性是:
Specification-Title
Specification-Version
Specification-Vendor
Implementation-Title
Implementation-Version
Implementation-Vendor
当要提供一个类库或编程接口时,描述信息显得是很重要,见以下范例:
Manifest-Version:1.0 Created-By:1.5.08 (Sun Microsystems Inc.) Class-Path: mail.jar activation.jar Name: com/example/myapp/ Specification-Title: MyApp Specification-Version: 2.4 Specification-Vendor: example.com Implementation-Title: com.example.myapp Implementation-Version: 2002-03-05-A Implementation-Vendor: example.com
Package Version 查询:
在manifest文件中加入package描述后,就可以使用Java提供的java.lang.Package class进行Package 的信息查询,这里列举3个最基本的获取package object的方法:
1.Package.getPackages():返回系统中所有定义的package列表
2.Package.getPackage(String packagename):按名返回package
3.Class.getPackage():返回给定class所在的package
使用这方法就可以动态的获取package信息. 需要注意的是如果给定的package中没有class被加载,则也无法获得package 对象
Manifest 技巧:
引用
总是以Manifest-Version属性开头
每行最长72个字符,如果超过的化,采用续行
确认每行都以回车结束,否则改行将会被忽略
如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关
使用空行分隔主属性和package属性
使用"/"而不是"."来分隔package 和class ,比如 com/example/myapp/
class 要以.class结尾,package 要以 / 结尾
每行最长72个字符,如果超过的化,采用续行
确认每行都以回车结束,否则改行将会被忽略
如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关
使用空行分隔主属性和package属性
使用"/"而不是"."来分隔package 和class ,比如 com/example/myapp/
class 要以.class结尾,package 要以 / 结尾
多个.class 打包成 .jar
http://blog.csdn.net/FG2006/article/details/5820876
Java jar命令
比如您的class包存放路径为 d:/com/demo (demo是个目录,下面含有子文件夹及class文件)
具体操作如下:
1、打开dos窗口,进入demo目录
cd d:/com/demo
2、执行 jar cvf demo.jar * 回车
3、在demo目录下面你会发现demo.jar
具体参数请看下面的解释:
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的〕文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式;未用zip压缩格式 -M 不产生所有项的清单(manifest〕文件 -i 为指定的jar文件产生索引信息 -C 改变到指定的目录,并且包含下列文件: 如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。
示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有文件存档到一个名为 'classes.jar' 的存档文件中:
jar cvfm classes.jar mymanifest -C foo/ .
来个小例子试试看:
我们只有一个HelloWorld,如下:
public class HelloWorld{ public static void main(String[ ] args){ System.out.println(“Hi, Hello World!”); } }
将这个java文件存到C盘跟目录下,ok,接下来,
在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar cvf hello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错 hello.jar 。
基本的步骤我们现在都知道了,你可以自己去尝试一下随着jar后面的参数的不同,结果有什么变化。
紧接着我们看看如何运行我们的jar包。
在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢,META-INF目录?再看看里面是什么,还有一个MANIFEST.MF文件是不是?用文本编辑器(我这里是UltraEdit)打开它看看:
Manifest-Version: 1.0 Created-By: 1.4.2 (Sun Microsystems Inc.)
就是这样。这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行)。这个就是我们之前写的那个类,也就是我们的入口类。也即,
Manifest-Version: 1.0 Created-By: 1.4.2 (Sun Microsystems Inc.) Main-Class: HelloWorld
接下来,我们在命令提示符里执行:
jar umf MANIFEST.MF app.jar (应该是hello.jar吧)
这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class: HelloWorld这一句。 (是吗,我怎么没试出来,提示java.io.FileNotFoundException:MANIFEST.MF(系统找不到指定的文件)怎么回事?)
Ok,这个最后的一步了,来验证我们做的一切,在命令提示符中输入:
java -jar hello.jar(执行)
出现了什么, Hi, Hello World!
我们再来看看jar文件在tomcat中发布,注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的:
先准备我们要打包的资源。
找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello,再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml。Ok,目前我们初步建立了一个简单的web应用。
如果运行机上装有中文版WinRaR解压软件,并且将.jar文件与该软件
作了关联,那么双击.jar文件时相当与解压,这样便无法运行java程
序,这时就需要再编写一个.bat文件,内容如下:
javaw -jar Tom.jar
这时只要运行.bat文件就可以了。
发表评论
-
[轉]java中String的“==”和equals判断相等性
2017-11-27 15:24 455http://blog.csdn.net/liucheng20 ... -
Android NDK搭建環境
2017-11-27 13:25 579https://www.cnblogs.com/ut2016- ... -
Java语言编码规范
2017-06-27 15:54 568http://morningspace.51.net/reso ... -
Java AWT应用示例 - 持续更新
2017-06-27 11:39 636/* * @(#)SampleAWT.java ... -
Java 事件模型基础:监听器、事件、事件源、事件注册
2017-06-27 08:55 822转自 http://www.cnblogs.com/mengd ... -
Java中基本数据类型和包装器类型的关系
2017-06-27 08:37 755转自 http://www.cnblogs.com/h ... -
深入剖析Java中的装箱和拆箱
2017-06-27 08:31 487转自 http://www.cnblogs.com/dolph ... -
Java反编译工具 - Java Decompiler
2017-06-21 20:14 474http://jd.benow.ca/ JD-GUI is ... -
javac,使用"-d ."与省略-d的区别
2017-06-20 20:27 808在当前工作目录下生成class文件,一般情况下有两种方法 ... -
JAVA环境变量配置
2017-06-19 13:56 354参考Link http://www.cnblogs.com/x ... -
JAVA高级应用之反射
2017-06-19 10:26 434参考链接 http://www.cnblogs.com/men ... -
Java高级应用之JNI
2017-06-19 09:00 599参考link http://www.cnblogs.com/l ... -
JDK工具appletviewer详解
2017-06-19 08:25 1129http://www.softown.cn/post/170. ... -
Java rt.jar 源码分析
2017-06-18 10:32 649jdk1.8.0_102 SRC +com +java ... -
应用 Command 模式进行流水号管理的最佳实践
2016-07-10 18:02 612转自 http://www.ibm.com/devel ...
相关推荐
本人经历三天制作出炉的jar打包工具,请大家下载试用。
为了方便用户,开发者有时会将`.jar`文件打包成`.exe`(Windows可执行文件),使得用户只需双击即可运行程序,无需关心是否安装了Java环境。 打包Java应用到`.exe`文件的过程主要涉及到以下知识点: 1. **Java可...
在Java开发过程中,将项目打包成可执行的JAR(Java Archive)文件是常见的操作,这使得代码可以方便地分发、部署和运行。本文将详细介绍如何将Java工程打包成可执行的JAR文件。 首先,确保你有一个完整的Java工程,...
Java进阶学习jar打包详解 Java进阶学习jar打包详解 Java进阶学习jar打包详解 Java进阶学习jar打包详解
`jar`(Java Archive)文件是一种用于存储多个类文件、相关元数据和资源文件(如图像或文档)的标准格式。这种格式类似于ZIP文件,但具有额外的功能,例如允许类文件的签名以及定义类路径。 #### 二、基础知识 **1...
Java开发过程中,打包工具起着至关重要的作用,它们帮助开发者将源代码编译、整合资源并打包成可执行的JAR文件。其中,"jarjar"是一个非常实用的工具,专为Java程序员设计,用于方便地对JAR文件进行操作,如重命名类...
#### 二、将jar打包成exe 为了使Java程序能够在没有安装JDK或JRE的环境下运行,我们可以将jar文件进一步打包成exe文件。这一步通常需要借助于专门的工具。 ##### 2.1 使用j2exe4j - **安装j2exe4j**:j2exe4j是一...
1. **使用Eclipse插件fat.jar打包** `fat.jar`插件允许开发者将所有依赖的第三方库一起打包进JAR,生成的JAR文件包含了一个完整的运行环境。这种方法的优点是方便,因为用户无需额外管理依赖。然而,它的主要缺点...
首先,`jar`文件是Java档案文件,它是Java平台特有的打包方式,用于收集多个类文件、相关的元数据和资源文件。创建jar文件的主要目的是便于分发和执行Java应用程序或库。`jar`命令是Java开发工具包(JDK)自带的工具,...
NULL 博文链接:https://jarg.iteye.com/blog/852885
### Java 打包成 JAR 文件的详细指南 在Java开发过程中,将项目打包成一个JAR(Java Archive)文件是非常常见的做法。JAR文件不仅可以方便地进行分发与部署,还能有效地组织类文件和资源文件。根据提供的信息,本文...
Java打包JAR(Java Archive)文件是将多个类文件、资源文件和其他相关文件组合到一个单一的可执行文件中,以便于分发和执行。在Java开发中,JAR文件通常用于封装库、应用程序或者Java小应用程序(Applet)。本实例将...
在Java编程中,将程序打包成JAR文件是常见的部署方式,这使得代码可以作为一个独立的可执行单元进行分发。然而,在打包包含数据库连接的Java应用程序时,可能会遇到一些问题,尤其是涉及到像MySQL这样的外部数据库。...
Java程序打包为Jar文件在Eclipse中的实现 Java程序员在开发过程中经常会遇到这样一个问题:如何将编写好的Java程序打包成一个可执行的Jar文件?在Eclipse中,我们可以通过简单的步骤将Java程序打包成Jar文件,本文...
在Java开发过程中,将程序打包成可执行的jar或exe文件是常见的需求。这使得用户无需安装Java环境即可运行程序,提高了软件的便利性和普及性。以下是对标题、描述及标签涉及的知识点的详细说明: 1. **Java程序打包...
Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总 本文档将详细介绍 Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总。Java 是一种流行的编程语言,广泛应用于软件开发、Android 应用开发...
### Java 文件打包成 JAR 文件详解 #### 一、JAR 命令概述 JAR(Java Archive)是 Java 开发工具包 (JDK) 中的一个实用程序,用于将多个 Java 类文件和其他资源文件打包成一个 JAR 文件。JAR 文件不仅便于分发和...
标题"java jar打包成exe"指的是这个过程:将Java程序打包成一个可以直接在Windows环境下运行的`.exe`文件。这样做的好处是提高了用户的便利性,因为他们无需知道或安装Java环境,只需双击`.exe`文件即可运行程序。 ...
Java打包机是一款便捷的工具,专门用于将Java的.jar文件转换为可执行的.exe文件,使得非Java环境的用户也能方便地运行Java程序。这款工具相比exe4j来说,操作更为简便,对于开发者来说,是一个快速发布Java应用程序...
### Java 文件打包成 .jar 文件及 jar 命令详解 #### 一、jar 命令概述 在 Java 开发中,经常会遇到需要将多个类文件或者资源文件打包成一个单独的 `.jar` 文件的需求。`.jar` 文件类似于 `.zip` 文件,是一种将多...