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文件的方案****************************
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,
launch.exe文件的图标太单调了,让我们给它换个好看点的。换程序的图标需要用到一个免费的软件:Resource Hacker,
******************************插件实现.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等其他各式的图片。
windows下双击可运行的Java软件打包方案(转)的更多相关文章
- JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java
JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...
- java环境的配置——实现win10下双击直接运行jar文件
java环境的配置--实现win10下双击直接运行jar文件 在渗透测试的过程中很多工具的安装和使用需要java环境,下面我来介绍一下java环境配置的超详细步骤(包含怎样实现win10下双击直接运行 ...
- [翻译]第一天 - 在 Windows 下安装和运行 .NET Core
原文: http://michaelcrump.net/getting-started-with-aspnetcore/ 免责声明:我不是 .NET Core 开发团队的一员,并且使用的是公开.可用的 ...
- windows下通过.bat运行java程序
在windows下运行Java项目,单独的jar可以使用,java -jar xxx.jar 运行,如果是一个zip包,里面包含了class文件和所依赖的jar的时候,可以使用 (也可以以看看这里): ...
- Windows下使用cmd运行jar文件
一般window系统下是不能直接运行jar文件的.(有些电脑可以,记得我以前的电脑是双击jar就可以运行的) 那么如何在windows下运行jar呢? 1.首先,电脑必须配置java运行环境jre-- ...
- windows下能读写linux分区的软件 转
1. ext2ifs 这个工具与explore2fs都是John Newbigin使用Delphi写的,explore2fs Copyright (C) 2000,Ext2IFS v0.3 Copyr ...
- windows下Redis安装及利用java操作Redis
一.windows下Redis安装 1.Redis下载 下载地址:https://github.com/MicrosoftArchive/redis 打开下载地址后,选择版本 然后选择压缩包 下载 R ...
- Windows下的Memcache安装与Java部署
Windows下的Memcache安装: 1. 下载memcached的windows稳定版,解压放某个盘下面,比如在c:\memcached 2. 在终端(也即cmd命令界面)下输入 ‘c:\mem ...
- 推荐Windows下SVN服务器端和客户端工具软件
相信很多人使用过Windows下的SVN客户端软件TortoiseSVN或者也有过Linux下.MAC下的SVN命令行使用经验,另外MAC下还有以一款就做Vesions的SVN客户端软件,不过个人感觉 ...
随机推荐
- C# 实现opc ua服务器的远程连接(转)
原文转自:https://www.cnblogs.com/dathlin/p/7724834.html OPC UA简介 OPC是应用于工业通信的,在windows环境的下一种通讯技术,原有的通信技术 ...
- SQL Server 2005 和自增长主键identity说再见——NEWSEQUENTIALID()(转载)
在SQL Server 2005环境下,表的主键应该怎样设计.目前主要用到的主键方案共三种: 自动增长主键 手动增长主键 UNIQUEIDENTIFIER主键 1.先说自动增长主键,它的优点是简单,类 ...
- <转>常规测试方法
功能测试 1. 安装测试: 安装过程中对于缺省安装目录及任意指定的安装目录,是否都能正确安装: 若是选择安装,查看能否实现其相应的功能: 在所有能中途退出安装的位置退出安装程序后,验证此程序并未安装成 ...
- umask的一般用法
常常会遇到我的Linux系统默认的八进制的umask值是0022,而我创建的文件的八进制权限却是644,这个是怎么一回事? umask值只是一个掩码,它会屏蔽掉掉不想授予该安全级别的权限. 用法是要把 ...
- VBnet窗口获取键盘输入
https://blog.csdn.net/youyoulg/article/details/39120669 C# WinFrom捕获按键按下事件(一) https://blog.csdn.net/ ...
- hue改保存记录条数
参考: https://blog.csdn.net/liaoxiaoyi121121/article/details/80541901 需求: 开发需要保存查询记录的条数从10万改到100万 /etc ...
- [python] 执行 dos 命令
python的os模块 os模块调用CMD命令有两种方式:os.popen(),os.system(). 都是用当前进程来调用. os.system是无法获取返回值的.当运行结束后接着往下面执行程序. ...
- Fiddler-打断点(bpu)
一.断点 1.为什么要打断点? 比如一个购买的金额输入框,输入框前端做了限制大于100,那么我们测试的时候,需要测试小于100的情况下.很显然前端只能输入大于100的.这时我们可以先抓到接口,修改请求 ...
- celery 调用scrapy
我的环境: celery 3.1.25 python 3.6.9 window10 celery tasks 代码如下,其中 QuotesSpider 是我的scrapy项目爬虫类名称 from ce ...
- TCP/IP 物理层卷二 -- 交换技术
一.概念 交换技术是指各台主机之间.各通信设备之间或者主机和通信设备之间(简单理解:你的PC和我的PC之间.你的PC和我的路由器.路由器之间)为交换信息所采用的的数据格式和交换装置的方式. 二.交换技 ...