jar 转 exe的工具很多,比较流行的有exe4j 、installanywhere(主要做安装)、jsmooth。我在这里选择了jsmooth。实际上jsmooth 和exe4j的操作都差不多,而jsmooth比exe4j还要小巧,我选择jsmooth。
制作分两种情况,一种是将jre 和 exe一同发布,这样你就可以不用考虑客户机器上安装jvm没有了。一种是要求客户机器上安装有jre的情况。
1. 先将要求客户机上安装有jre的情况:
很 多文章都喜欢从界面操作上开始讲
http://www.java1995.cn/blog/item/446,而我认为从项目文件讲就更简单了。如下是我的jar转exe的test.exe.jsmooth文件。用jsmooth 直接打开 test.exe.jsmooth这个文件(至于界面上每一步该怎么设置都一目了然,全设置好了。),
直接编译就ok了。
test.exe.jsmooth文件内容如下:
1
<?
xml version="1.0" encoding="ISO-8859-1"
?>
2
<
jsmoothproject
>
3
<
JVMSearchPath
>
registry
</
JVMSearchPath
>
4
<
JVMSearchPath
>
javahome
</
JVMSearchPath
>
5
<
JVMSearchPath
>
jrepath
</
JVMSearchPath
>
6
<
JVMSearchPath
>
jdkpath
</
JVMSearchPath
>
7
<
JVMSearchPath
>
exepath
</
JVMSearchPath
>
8
<
JVMSearchPath
>
jview
</
JVMSearchPath
>
9
<
arguments
></
arguments
>
10
<
currentDirectory
>
.
</
currentDirectory
>
11
<
embeddedJar
>
true
</
embeddedJar
>
12
<
executableName
>
test.exe
</
executableName
>
13
<
iconLocation
>
Ico02 042.ico
</
iconLocation
>
14
<
initialMemoryHeap
>
-1
</
initialMemoryHeap
>
15
<
jarLocation
>
JavaApplication19.jar
</
jarLocation
>
16
<
mainClassName
>
Client
</
mainClassName
>
17
<
maximumMemoryHeap
>
-1
</
maximumMemoryHeap
>
18
<
maximumVersion
></
maximumVersion
>
19
<
minimumVersion
></
minimumVersion
>
20
<
skeletonName
>
Windowed Wrapper
</
skeletonName
>
21
<
skeletonProperties
>
22
<
key
>
Message
</
key
>
23
<
value
>
This program needs Java to run.
24
Please download it at http://www.java.com
</
value
>
25
</
skeletonProperties
>
26
<
skeletonProperties
>
27
<
key
>
URL
</
key
>
28
<
value
>
http://www.java.com
</
value
>
29
</
skeletonProperties
>
30
<
skeletonProperties
>
31
<
key
>
SingleProcess
</
key
>
32
<
value
>
1
</
value
>
33
</
skeletonProperties
>
34
<
skeletonProperties
>
35
<
key
>
Debug
</
key
>
36
<
value
>
0
</
value
>
37
</
skeletonProperties
>
38
</
jsmoothproject
>
其中:
(1).<
arguments
></
arguments
>表示运行参数。
(2).
<
currentDirectory
>
.
</
currentDirectory
>表示的是当前目录,那么你直接把要转换的jar和test.exe.jsmooth放在同一个目录。(我这里都是放在同一个目录下)
(3).
<
executableName
>
test.exe
</
executableName
>表示生成exe的名字。(我没有测试放在不同目录下的结果,我不认为有必要做这个测试)。
(4).
<
iconLocation
>
Ico02 042.ico
</
iconLocation
>表示exe所使用的图标。
(5).
<
jarLocation
>
JavaApplication19.jar
</
jarLocation
>表示要转的jar文件。
(6).
<
mainClassName
>
Client
</
mainClassName
> 表示主类
(7).
<
skeletonName
>
Windowed Wrapper
</
skeletonName
>
表示的是运行时候,不需要带dos控制台窗口。对应的是Console Wrapper。
直接保存test.exe.jsmooth文件就可以用。
对于应用的目录结构图:
2.第2种情况,即带jre的exe
<?xml version="1.0" encoding="ISO-8859-1"?>
<jsmoothproject>
<JVMSearchPath>registry</JVMSearchPath>
<JVMSearchPath>javahome</JVMSearchPath>
<JVMSearchPath>jrepath</JVMSearchPath>
<JVMSearchPath>jdkpath</JVMSearchPath>
<JVMSearchPath>exepath</JVMSearchPath>
<JVMSearchPath>jview</JVMSearchPath>
<arguments></arguments>
<bundledJVMPath>java</bundledJVMPath>
<classPath>java\bin</classPath>
<classPath>java\lib</classPath>
<classPath>java\lib\rt.jar</classPath>
<classPath>java\lib\javaws.jar</classPath>
<currentDirectory>Test.exe</currentDirectory>
<embeddedJar>true</embeddedJar>
<executableName>Test.exe</executableName>
……后面同上例一样。
最重要的区别是这个绑定了java虚拟机,指定了classpath路径。
编译时候,把java文件放在同一目录下:
其中test.exe是生成的。
简单吧,编译就生成了exe文件了。