常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了;而另一种是使用 JET 来进行 编译。但是 JET 是要用钱买的,而且据说 JET 也不是能把所有的 Java 程序都编译成执行文件,性能也要打些折扣。所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性。
下面就来看看什么是 JAR 文件包吧:
1. JAR 文件包
JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。举个例子,如果我们具有如下目录结构的一些文件:
==
`-- test
`-- Test.class
把它压缩成 ZIP 文件 test.zip,则这个 ZIP 文件的内部目录结构为:
test.zip
`-- test
`-- Test.class
如果我们使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,则这个 JAR 文件的内部目录结构为:
test.jar
|-- META-INF
| `-- MANIFEST.MF
`-- test
`--Test.class
2. 创建可执行的 JAR 文件包
制作一个可执行的 JAR 文件包来发布你的程序是 JAR 文件包最典型的用法。
Java 程序是由若干个 .class 文件组成的。这些 .class 文件必须根据它们所属的包不同而分级分目录存放;运行前需要把所有用到的包的根目录指定给 CLASSPATH 环境变量或者 java 命令的 -cp 参数;运行时还要到控制台下去使用 java 命令来运行,如果需要直接双击运行必须写 Windows 的批处理文件 (.bat) 或者 Linux 的 Shell 程序。因此,许多人说,Java 是一种方便开发者苦了用户的程序设计语言。
其实不然,如果开发者能够制作一个可执行的 JAR 文件包交给用户,那么用户使用起来就方便了。在 Windows 下安装 JRE (Java Runtime Environment) 的时候,安装文件会将 .jar 文件映射给 javaw.exe 打开。那么,对于一个可执行的 JAR 文件包,用户只需要双击它就可以运行程序了,和阅读 .chm 文档一样方便 (.chm 文档默认是由 hh.exe 打开的)。那么,现在的关键,就是如何来创建这个可执行的 JAR 文件包。
创建可执行的 JAR 文件包,需要使用带 cvfm 参数的 jar 命令,同样以上述 test 目录为例,命令如下:
jar cvfm test.jar manifest.mf test
这里 test.jar 和 manifest.mf 两个文件,分别是对应的参数 f 和 m,其重头戏在 manifest.mf。因为要创建可执行的 JAR 文件包,光靠指定一个 manifest.mf 文件是不够的,因为 MANIFEST 是 JAR 文件包的特征,可执行的 JAR 文件包和不可执行的 JAR 文件包都包含 MANIFEST。关键在于可执行 JAR 文件包的 MANIFEST,其内容包含了 Main-Class 一项。这在 MANIFEST 中书写格式如下:
Main-Class: 可执行主类全名(包含包名)
例如,假设上例中的 Test.class 是属于 test 包的,而且是可执行的类 (定义了 public static void main(String[]) 方法),那么这个 manifest.mf 可以编辑如下:
Main-Class: test.Test <回车>;
这个 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且该行以一个回车符结束即可。创建了 manifest.mf 文件之后,我们的目录结构变为:
==
|-- test
| `-- Test.class
`-- manifest.mf
这时候,需要到 test 目录的上级目录中去使用 jar 命令来创建 JAR 文件包。也就是在目录树中使用“==”表示的那个目录中,使用如下命令:
jar cvfm test.jar manifest.mf test
之后在“==”目录中创建了 test.jar,这个 test.jar 就是执行的 JAR 文件包。运行时只需要使用 java -jar test.jar 命令即可。
需要注意的是,创建的 JAR 文件包中需要包含完整的、与 Java 程序的包结构对应的目录结构,就像上例一样。而 Main-Class 指定的类,也必须是完整的、包含包路径的类名,如上例的 test.Test;而且在没有打成 JAR 文件包之前可以使用 java <类名>; 来运行这个类,即在上例中 java test.Test 是可以正确运行的 (当然要在 CLASSPATH 正确的情况下)。
这几天事情有点多,心情很烦躁,晚上都不想睡觉
1. Comp202作业3的重新设计。为什么这种事情要来折磨我啊,天底下现在还有什么事情要说最痛苦莫过于重新设计一个作业了!
2. Survey是吧,唉,唉,唉。三叹世事变化之快,而感双手无力之衰。
3. 明清项目啊,你们这些变态。简单的不做,偏向虎山行。那个变态的renee还假把意思的征求她老公的意见。真是tmd写paper的人就是不懂写代码的辛苦。5千块钱看样子我都是要少了,至少再加两千才能补偿我每天担惊受怕的费用。
唉,还有什么啊,怎么感觉事情还很多啊。
我真是很怀念大学时代的生活,哪天心情不好,哥就去外地玩了,也没有什么心理压力,也没有什么负责不责任的事情。(.....当然现在也有机会可以出去玩).....demo, demo,剩下的钱都早被我拿去换加元了!!!唉,自己挣的钱用起来是没有以前用爸妈的爽啊。
真是不想睡觉,我打算今晚就不睡了,一会儿去洗个澡(哦,要先下去买碗方便面)再看部电影,最好和成都或者重庆有关的电影(嗨,选择还真是不多)。今天晚上真是很思念成都啊..... 刚才又在“无名小站”上搜了无数关于成都的博客,小小满足了下。过段时间,有空,感觉不欠别人代码的时候(我有吗?),我一定要写篇关于成都旅游的文章。(突然想到,其实我应该能写很多有趣的关于东京风俗(此风俗非日文之“风俗”)的文章。但是,总是不太想去动手打字。)
Anyway,在这里写写感觉稍微好点了。Let's call it a day now.
[转]中国经济数据中的暗点与亮点
谭新木
显示中国经济形势严峻的主要数据有:
--外需恶化促使第四季度增速下滑。四季度国内生产总值(GDP)增长6.8%,比三季度放缓2.2个百分点;工业增加值同比增长6.4%,比三季度大幅下滑6.6个百分点。中金公司首席经济学家哈继铭在研究报告中说,这些数据“彰显外需恶化、出口遇阻导致经济大幅恶化”。银河证口首席经济学家左小蕾在采访中也说,国际大环境没有改观,甚至还在恶化,今年的经济增长下滑压力不可轻视。
--房地产市场继续低迷。哈继铭说,房地产开发投资全年增长继续下滑至20.9%,城镇固定资产投资扣除价格因素实际增长15.8%,体现了房市低迷的影响进一步持续,预计今年房地产、制造业投资还将继续下滑。渣打银行中国研究部主管王志浩在研究报告中说,房市观望气氛浓厚,入市的房屋存量仍然超过销售量。
--通缩苗头出现。12月工业品出厂价格同比回落1.1%,低于市场预期的回落0.1%,为6年来第一次出现通缩;12月消费物价指数CPI继续放缓至1.2%,低于市场预期的1.6%。哈继铭说:“通胀数据的快速下滑充分验证了我们对于产能过剩和大宗商品价格下跌将引发通缩的判断。”
但是,这些数据中也有一些亮点:
--消费增长稳中有升。左小蕾说,考虑到通胀因素,第四季度的消费增长与上半年比较,保持了稳定的水平。她估计,3年8000亿的社会保障全覆盖项目如果投入到位,近期拉动2-3个百分点的消费增长是完全可能的。她说:“2-3个百分点的消费增长可以吸收对美国出口10%的下降。”王志浩说,虽然零售不等于消费,但社会消费品零售保持增长仍然“值得欢呼”。
--政策调控作用开始显现。王志浩说,11月份和12月份银行放贷大幅增长,其中12月份贷款实际增长18.8%,其“意义怎么强调都不会过分”,因为这既可能阻止了企业在春节前的信贷困难,又可能意味着银行已经为经济刺激计划提供融资做好了准备。左小蕾说,如果没有政策性投入,第四季度的增速可能在5%以下甚至更低,“说明政策的调控作用很大”。
综合来看,中国经济的严冬还没有过去,但出现失控的可能性也非常小。
(本文作者谭新木是《华尔街日报》中文网专栏撰稿人。文中所述仅代表他个人观点)
Subscribe to:
Posts (Atom)