找回密码
 立即注册
搜索
查看: 285|回复: 3

将JAVA编译成可执行文件的编译器汇总

[复制链接]

340

主题

3478

回帖

5028

积分

网站编辑

积分
5028
发表于 2004-9-12 10:48:08 | 显示全部楼层 |阅读模式
有的能够生成本机代码,不需要虚拟机支持,纯粹是可执行文件,有的需要虚拟机,隐含运行虚拟机。

1. 从www.towerj.com获得一个TowerJ编译器?..编译成EXE文件。
注:现在已经找不到,不提供了,被人家收购了。可以从网上其他地方找到。

2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以从微软的网站免费下载,地址如下:
http://www.microsoft.com/java/download/dl_sdk40.htm

jexegen的语法如下:

jexegen /OUT:exe_file_name /MAIN:main_class_name ain_class_file_name.class [and other classes]


3. Visual Cafe提供了一个能够创建EXE文件的本地JAVA编译器,不需要虚拟机。你需要安装该光盘上提供的EXE组件。

4. 使用InstallAnywhere创建安装盘。
注:很不错的工具。
但就是要>8M(带jre),还有一种是>1M的(不带jre)。
但是它可以编译成各种平台上可以使用的exe程序。

5. 使用IBM AlphaWorks提供的一个高性能Java编译器,该编译器可以从下面的地址获得:
http://www.alphaworks.ibm.com/tech/hpc


6. JET是一个优秀的Java语言本地编译器。它可以将 Java 源程序编译成 Win32 可执行文件,这个文件的运行速度相当于 C++ 应用程序,并且不需要虚拟机来执行。该编译器可以从这个网站获得一个测试版本:
http://www.excelsior-usa.com/jet.html


7. Instantiations公司的JOVE
http://www.instantiations.com/jove/...ejovesystem.htm
JOVE公司合并了以前的SuperCede,一个优秀的本地编译器,不需要虚拟机,现在SuperCede已经不复存在了,可以从网络上其他地方找到。


8. JToEXE
Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的网页上免费下载的,不过目前在该公司的主页上找不到了。可以从其他地方找到。
公司主页:http://www.bravozulu.com/
下面这个FTP上曾经有过这个软件,不知道现在是不是还在:
ftp://race.dlut.edu.cn/pub/java/tools/jet



9.Exe4j
很不错

10.jbuilder
这个工具不用多讲了,在jbuilder6.0以前的(包括6.0),是不能生成exe文件的,所以可以用如下的方法实现。这可以人家高手想出来的,我只是帮着宣传一下。
还有jbuilder7.0开始都可以生成exe文件。

这个是Borland不公开的使用技巧,能够通过JBuilder来制作exe文件来启动Java文件。
JBuilder并不支持本地编译机制。但是有一个隐藏的技巧可以让你从可执行文件来启动Java程序,可以出现或者不出现console窗口。想做到这些,需要JBuilder的bin目录下的这些文件:
JBuilder.exe
JBuilderW.exe (可选)
JBuilder.config
jdk.config
JavaLauncher.dll
“JBuilder.exe”是一个通用的可执行外壳文件,用以启动Java程序,”JBuilderW.exe“好像是javaw.exe一样,它把”JBuilder.exe”包装起来,但是运行时候不显示那个console的窗口。使用这些文件的关键是文件名。“JBuilder.exe”查找一个文件叫”JBuilder.config”的配置文件,里面包含了运行Java程序的必须信息。同样的”JBuilderW.exe”查找”JBuilder.exe”来启动不带Console窗口的Java程序。如果把JBuilder.exe重命名为”foo.exe”,那”foo.exe”将去寻找”foo.config”配置文件,同样”JBuilderW.exe”被重命名为”fooW.exe”,它会去寻找”foo.exe”文件。
说到这里,聪明的读者应该猜到怎样利用JBuilder.exe来启动应用程序了。只要把JBuilder.exe,JBuilerW.exe,JBuilder.config改名成相应的文件名,在JBuilder.config里面指定主类和类路径,就能够通过执行JBuilder.exe(或者被改名后的exe文件)来启动Java应用程序了。下面是用本机为例。
Borland JBuilder 5被安装在E:\jbuilder5\目录下,在E:\jbuilder5\bin\下建立一个temp目录,然后把JBuilder.exe,JBuilder.config,JavaLauncher.dll,jdk.config四个文件拷贝到E:\jbuilder5\bin\temp\目录下,然后在这个目录下建立一个hello目录,在这个目录下生成一个hello.java文件,即E:\jbuilder5\bin\temp\hello\hello.java文件,
//hello.java/
package hello;
public class hello{
public static void main(String s[]){
System.out.println("Hello, Exe file!");
}
}
编译成class文件,然后打开Jbuilder.config文件,作相应的修改:
在JBuilder.config里面找到下面两行
# Start JBuilder using the its main class
mainclass com.borland.jbuilder.JBuilder
修改为
# Start JBuilder using the its main class
mainclass hello.hello
addpath E:/jbuilder5/bin/temp/
addpath命令是把目录加入类路径中,这个命令和其它config里面可以识别的命令可以在JBuilder/bin目录下的config_readme.txt里面找到详细说明。
然后将jdk.config里面的javapath修改成相对的路径,例如原来是
javapath ../jdk1.3/bin/java
修改成
javapath ../../jdk1.3/bin/java
最后
将JBuilder.exe,JBuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件。
现在执行foo.exe文件
至此,通过修改JBuilder来使用exe文件启动自己的Java应用程序已经完成了。
但是好玩的地方并不在这个地方,下面的小技巧可能更有趣,将Jar文件打包进入exe文件!
假设利用上面的文件,生成hello.jar包,
jar cvf hello.jar hello\*.class
然后将jar包附加到JBuilder.exe后面去,
copy /b ..\JBuilder.exe+hello.jar foo.exe
在foo.config(JBuilder.config)文件里面把前面加入的类路径去掉,并加入下面的路径:
addpath E:/jbuilder5/bin/temp/foo.exe
然后执行,foo.exe
看到了么?一个含jar包的exe文件被执行了!
这个过程的大致原理是:exe文件的重要信息都在文件头部,所以把乱七八糟的东西放exe文件尾部是不要紧的;而jar/zip文件的重要信息是在文件尾部的,这样它们两不相干,能够容易的被执行。
请注意:读者如果使用这个功能,得自己承担可能带来的风险,因为Borland对这个功能不提供官方的支持!

498

主题

5866

回帖

8541

积分

网站编辑

LMSung

积分
8541
发表于 2004-9-12 11:56:24 | 显示全部楼层
我用过的,我来说一下.
InstallAnywhere 生成的exe可以运行,但是他会寻找本机是否安装jre,检测不到就退出安装程序.

jbuilder 生成的也需要jre

JToEXE 也需要 jre

Exe4j 更需要jre 因为没有jre 这个程序本身都不能运行

其他的就不知道了,应该都需要jre的

最简单的方法就是,用这些东西做成exe以后,干净的安装一个windows2003,什么也不安装。
看看这些exe可否能够执行
能够就说明java真正的变成pe了,摆脱了jre
如果不能运行就是 不能脱离jre
回复

使用道具 举报

498

主题

5866

回帖

8541

积分

网站编辑

LMSung

积分
8541
发表于 2004-9-12 12:05:58 | 显示全部楼层
在 Windows 98/2K/XP 平台上, 目前幾乎所有能把 Java 程式編譯成 *.exe 檔的軟體都只是製造一個 Launcher 而已 (例如 JBuilder/NativeJ/Visual J++, 所產生的 Launcher被反組譯回source code其實很容易), 執行時還是需要 JRE/JVM 存在, 速度頗慢。即使是用 Excelsior JET, 若有參考到 awt/swing, 程式 deploy 時仍然需要裝JRE才能執行, 很不方便。
回复

使用道具 举报

76

主题

807

回帖

1169

积分

金牌会员

积分
1169
发表于 2004-9-14 20:30:24 | 显示全部楼层
这个不错,可以编译成EXE文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-19 22:16 , Processed in 0.089318 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表