windows下双击可运行的Java软件打包方案(转)

出处: http://www.cnblogs.com/shiyangxt/

刚开始学Java的时候,挺郁闷的,写出来的java类文件,需要dos下编译,然后再dos下运行看效果。这使初学者常常

觉得麻烦,学习的深入以后,会接触到eclipse、netbean和一些插件IDE产品。极大的方便了java的编写,但是随着自己写的程序

越来越大,渐渐成项目和软件的时候,就需要常常和jar文件打交道。渐渐的想让java文件的执行更痛快点,不想给其他人演示个小

软件还要在IDE里看效果,十分的不帅。现在整理出几个windows下双击就能运行java程序的方法,无非就是弄成.exe和.jar文件嘛。

----------------------------------------------------------------------------------------

以下内容部分取自网上,我实在是懒得写就直接贴下来了。

首先是打包运行jar文件的方法。

现在的windows都会装j2se的解析器的,所以这就是说,如果打包成jar文件,用这个j2se解析器打开就可以双击运行。

**********************下面是jar包的打包方法************************

1.建立MANIFEST.MF (在class文件根目录下)
以下内容为文件的基本内容
==================
Manifest-Version: 1.0
Main-Class: a(主类的路径)
Created-By: Abc Company (创建人名字)
==================

2.打包
按照lz给的条件
在class文件目录下执行
jar cvfm classes.jar MANIFEST.MF *.*

以上命令将class下所有文件打包到classes.jar,生成在class目录下

3.执行
windows下双击就可以执行。

-----------------------------------这个是我推荐的方案,因为简单。

**************************MANIFEST.MF 文件详解**************************

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其

中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件

的内容,先来看struts.jar中包含的MANIFEST.MF文件内容:

Manifest-Version: 1.0
Created-By: Apache Ant 1.5.1
Extension-Name: Struts Framework
Specification-Title: Struts Framework
Specification-Vendor: Apache Software Foundation
Specification-Version: 1.1
Implementation-Title: Struts Framework
Implementation-Vendor: Apache Software Foundation
Implementation-Vendor-Id: org.apache
Implementation-Version: 1.1
Class-Path:  commons-beanutils.jar commons-collections.jar commons-digester.jar commons-logging.jar

commons-validator.jar jakarta-oro.jar struts-legacy.jar

如果我们把MANIFEST中的配置信息进行分类,可以归纳出下面几个大类:

一. 一般属性

1. Manifest-Version
 用来定义manifest文件的版本,例如:Manifest-Version: 1.0

2. Created-By
 声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1

3. Signature-Version
 定义jar文件的签名版本

4. Class-Path
 应用程序或者类装载器使用该值来构建内部的类搜索路径

二. 应用程序相关属性

1. Main-Class
 定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。
 
三. 小程序(Applet)相关属性

1. Extendsion-List
 该属性指定了小程序需要的扩展信息列表,列表中的每个名字对应以下的属性
2. <extension>-Extension-Name
3. <extension>-Specification-Version
4. <extension>-Implementation-Version
5. <extension>-Implementation-Vendor-Id
5. <extension>-Implementation-URL

四. 扩展标识属性

1. Extension-Name
 该属性定义了jar文件的标识,例如Extension-Name: Struts Framework
 
五. 包扩展属性
 
1. Implementation-Title   定义了扩展实现的标题
2. Implementation-Version   定义扩展实现的版本
3. Implementation-Vendor   定义扩展实现的组织 
4. Implementation-Vendor-Id   定义扩展实现的组织的标识
5. Implementation-URL :   定义该扩展包的下载地址(URL)
6. Specification-Title   定义扩展规范的标题
7. Specification-Version   定义扩展规范的版本
8. Specification-Vendor   声明了维护该规范的组织
9. Sealed   定义jar文件是否封存,值可以是true或者false (这点我还不是很理解)

六. 签名相关属性

签名方面的属性我们可以来参照JavaMail所提供的mail.jar中的一段

Name: javax/mail/Address.class
Digest-Algorithms: SHA MD5
SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4=
MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw==

这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE64方法进行编码)

七.自定义属性

除了前面提到的一些属性外,你也可以在MANIFEST.MF中增加自己的属性以及响应的值,例如J2ME程序jar包中就可能包含着如下信息

MicroEdition-Configuration: CLDC-1.0
MIDlet-Name: J2ME_MOBBER Midlet Suite
MIDlet-Info-URL: http://www.javayou.com/
MIDlet-Icon: /icon.png
MIDlet-Vendor: Midlet Suite Vendor
MIDlet-1: mobber,/icon.png,mobber
MIDlet-Version: 1.0.0
MicroEdition-Profile: MIDP-1.0
MIDlet-Description: Communicator

关键在于我们怎么来读取这些信息呢?其实很简单,JDK给我们提供了用于处理这些信息的API,详细的信息请见

java.util.jar包中,我们可以通过给JarFile传递一个jar文件的路径,然后调用JarFile的getManifest方法来获取Manifest信息。

****************************打包.exe文件的方案****************************

对于windows用户来说,将java应用程序打包成.exe最好不过了,现在我介绍两个方法。

1、用专业的应用程序打包工具InstallAnywhere,这个软件几乎能在所有平台上运行,当然你要下载到你需要的那个平台的啦!而且它也

能打包成各个平台的安装程序。

2、用MINI的免费的工具javalunch,JavaLauncher的下载网址是:

http://www.rolemaker.dk/nonRoleMaker/javalauncher/marner_java_launcher.htm

下载下来的文件是一个名JavaLauncher.zip的压缩包,解压后的目录结构:

l           source目录包含了JavaLauncher的源程序,是用C语言写的

l           changes.txt是新版的修改说明

l           launch.exe是主程序

l           launcher.cfg是配置文件

l           readme.txt是一些说明和示例

我们只需要launch.exe、launcher.cfg两个文件,将这两个文件复制到打包文件所在的目录。launcher.cfg是一

个仅三行内容的文本文件,将它修改如下:

.\java1.4.2\jre\bin\javaw.exe

-jar myswt.jar

l           第一行设置指向JAR包myswt.jar的目录,由于launch.exe和myswt.jar同在一个目录,所以用"."即当前目录。

l           第二行设置指向jre\bin\javaw.exe的路径。

配置好launcher.cfg后,双击launch.exe即可运行java应用程序。

如果仔佃研究eclipse的启动方式,发现eclipse和JavaLauncher的原理一样:eclipse.exe相当于launch.exe,

startup.jar相当于myswt.jar。只不过eclipse.exe不象launch.exe要具有通用性,所以它没有*.cfg这样的配置文件,

而是将启动信息固化在eclipse.exe中。

另:美化图标
launch.exe文件的图标太单调了,让我们给它换个好看点的。换程序的图标需要用到一个免费的软件:Resource Hacker,

它有中文版,下载网址是:
http://www.users.on.net/johnson/resourcehacker/
由于这个软件有中文版的,在这里我就不多说了,挺简单的。

------------------------写了这么一坨,我没看完。没研究这个工具的心情。

******************************插件实现.exe文件导出****************************

一 JSmooth
1.出品
Jsmooth,Sourceforge.net
2. 类型
free
3. 下载
http://jsmooth.sourceforge.net/download.php
4. 步骤
a)利用Eclipse将所需要的主类打成可独立运行的jar包,注意添加manifest属性和MainClass。
b)新建一个Jsmooth工程
c) 在sketlon中选择“Console“ 或者 “Windowed“
d) 在Executable中的配置:
i. Executable Binary:填写目的输出源的名称。如test.exe.
ii. Executable Icon :选择一个好看点的图标
iii. Current Driectory :.(表示当前工程目录,当然也可行换成别的,As you wish.)
e) 在Application中的配置:
i. Classpath:选中我们所生成的jar包以及运行该jar文件所需要的类库
ii. Main-Class:选中我们所需要运行的主类。
iii. 可选项Use an embedded jar:运行该exe时可能需要到的类库(这里只能有一个类库)。
f) 在JVM Selection中的配置:
i. Minimum JVM Version:写一个需要运行该程序所需的最低的就JVM的版本,比如1.4
g) Compile:OK,编译成功后,在你的输出目录上就会有一个崭新的exe程序了。Just enjoy it.
二 exe4J
1. 出品
ej-technologies
2.类型
Shared software,needs license
3.下载
http://www.ej-technologies.com/download/exe4j/files.php
4. 步骤
a) 利用Eclipse将所需要的主类打成可独立运行的jar包,注意添加manifest属性和MainClass。
b) 新建一个exe4j工程
c) 选择“JAR in exe“ mode
d) 在Configure application中的配置:
i. Short name:随便写.
ii. Ourput Driectory :选择输出路径。
e) 在Configure Executable中的配置:
i. Executable type: 有三个选项,图形,控制台.或服务。从简单点开始吧,这里我们选console
ii. Executable name:填写目的输出源的名称。如test.exe
iii. Icon file:exe图标文件,但必须是.ico文件
f) 在Configure Java invocation中的配置:
i. Classpath:选中我们所生成的jar包以及运行该jar文件所需要的类库
ii. Main-Class:选中我们所需要运行的主类。
iii.Arguments(可选项):输入参数。我们这里暂不需要。
g)在Configure JRE中的配置:
i. Minimum Version:写一个需要运行该程序所需的最低的就JVM的版本,比如1.4
h) 一直next,对于所遇到的步骤选项都默认,直到finish:OK。编译成功后,在你的输出目录上就会有一个崭新的exe程序了。Just enjoy it.
三 总结和比较
由Java生成exe的工具还有很多,上面两种是我个人觉得用起来觉得比较方便的。两者的原理基本相同,但具体用起来还是有一点点不太一样的:
1.相同点
a) 最大的相同点当然是他们原理是互通的。都是通过将可运行的java程序打成可执行的jar包。再作转换。
b) 所生成的exe可执行程序,需要在装有比minimum version高的JVM环境下运行。
2. 不同点
a) 生成exe的时候,如果想要exe只需要pure
JVM的环境(不需要第三方的类库)就可以运行的话。在JSmooth需要将所有的用到的第三方类库压缩成一个jar包(因为它有个embeded
jar的选项),这就比较麻烦,因为当需要的jar多于一个时候,就需要将这些jar包先用jar –xvf 解压缩,在用jar
–cvf重新制作新的jar文件,再放到embeded
jar选项中去;而exe4J则会把classppath中所用到的jar包也会编译到exe中去。
b) JSmooth是免费的;而exe4J是共享软件,需要注册,否则在执行exe的时候会弹出很惹人烦的提示框。
c)ico文件的选择:exe4J要求严格的ico文件,而JSmooth则可以兼容jpg等其他各式的图片。

时间: 2024-10-28 04:53:47

windows下双击可运行的Java软件打包方案(转)的相关文章

Win 管理器 运行命令 大全(Windows下的DOS运行命令)

DOS 运行命令管理器字符大全 Win 管理器  运行命令 大全(Windows下的DOS运行命令) Nslookup-------IP 地址侦测器 explorer-------打开资源管理器 devmgmt.msc--- 设备管理器 progman--------程序管理器 taskmgr-----任务管理器(2000/ xp/ 2003 ) ntmsmgr.msc----移动存储管理器 eventvwr-------事件查看器 sysedit--------系统配置编辑器 regedt32

linux路径分隔符&#39;/&#39;与windows下的分隔符&#39;\\&#39;,以及java项目,web项目读取项目的路径

1, linux下的文件分隔符是'/', windows下的文件分隔符为'\'.但是'\'这个符号是转义符.如果需要在console输出'\'这个符号的,你需要输入'\\'.另外转义符'\'还可以用双引号的字符内部再次使用双引号的这种情况,例如下面第三行. @Test public void test$(){ System.out.println("\\"); System.out.println('/'); System.out.println("\"为了转义双引

在windows下查看某个运行程序(或进程)的命令行参数

在windows下查看某个运行程序(或进程)的命令行参数使用下面的命令:wmic process get caption,commandline /value如果想查询某一个进程的命令行参数,使用下列方式:wmic process where caption="svchost.exe" get caption,commandline /value这样就可以得到进程的可执行文件位置等信息.

Windows下使用Mintty运行Git Bash

最近从Linux上下写C++换到Windows上写C#.感觉大为不同. 最大的变化是 --- 各种GUI工具啊...满天飞,各种找菜单.不习惯!! 怀念bsh的灵活啊~~~ 为何要使用Git Git是当下最流行的版本管理器了. 好处很多,不过最重要的其实就一点 不用总是访问服务器,每个人都有整个仓库 ps:Git恐怕是老板最爱了,大家回家连不上公司服务器也可以在家加班做commit啊 ... :( Window上的Git Git是从Linux平台上发展来的. Linux平台的特点就是大家都狂敲命

windows 下安装和运行 hadoop

windows下安装hadoop,直接去官网采用简单暴力的方法: 1.下载hadoop的安装包:http://hadoop.apache.org/->左边点Releases->点mirror site->点http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common->下载hadoop-2.9.0.tar.gz: 2.解压安装包:将下载包解压到指定目录,并添加环境变量:解压出来一个目录:D:\hadoop-2.9.0,将bin路径

Mac平台下的Qt程序在Windows下执行编译运行出现的中文乱码问题

Mac平台下的Qt程序在Windows下执行编译运行时,QString::asprintf()部分会出现的中文乱码问题,之前已经使用QStringLiteral宏解决了一个中文乱码问题: 但是此种情形单凭QStringLiteral宏解决不了. 原因: mac下采用MinGW编译,在Windows下可能是MinGW,也可能是MSV2017等VS编译器编译.如果win平台下是MinGW编译,在mac下写好的程序在win平台下运行不会出现乱码: 如果win下是MSV2017编译就会出现中文乱码,需要

windows下搭建LDAP并利用Java实现对LDAP的操作

什么是LDAP,百度百科一堆专业术语的描述. 我总结为一句话:轻量级目录访问协议,有数据库的数据存储功能,以树状层次型存储方式,就好像你的电话薄那样. 在一次项目中,由于该项目是教育性管理项目,客户要求项目必须部署在内网.那么在内网的话,就代表用户需要去拨VPN才能进行内网的访问. 其实当时我想到的是,单独开个注册映射到外网,让用户自己注册,管理员进行审核,然后用VPN去读数据库中的账号和密码就行了.这样,我们的系统和vpn就 相当于统一账号.但是当我确认需求的时候,那个老师告诉我们,他不会读什

Windows下使用Eclipse运行C、C++程序

相信大家都想在Eclipse下运行C.C++程序,可又无奈不知道怎么配置,谷歌了好长时间也只是百度到了gcc环境下的配置方式,下了三四个软件包,到最后还是配置失败了. 那么我现在介绍的这种方式呢,不是基于GCC编译器,而是基于VC的. 步骤一: 你需要下载Eclipse for C++版本的包,当然你也可以自己装插件(我是不推荐,除非你闲的蛋疼,有现成的干嘛不用,装逼啊?) 下载地址: 官方下载地址:   http://www.eclipse.org/downloads/ 那么下载完后呢,解压就

【原】无脑操作:Windows下搭建Kafka运行环境

Kafka是一种高吞吐量的分布式发布订阅消息系统 1.优点:① 通过磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能.② 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息.③ 支持通过Kafka服务器和消费机集群来分区消息.④ 支持Hadoop并行数据加载. 2.基本概念: ① Broker:Kafka集群包含的一个或多个服务器② Topic:每条发布到Kafka集群的消息都有一个类别主题.(物理上不同Topic的消息分开存储,逻辑上一