老兵学Java编程(3):如何发布

时间:2023-02-22 19:29:07

引言

        做不完的是工作,补不足的是睡眠,留不住的是时间,于是,学习又被束之高阁。

        急功近利、目光短浅、心浮气燥的老板,看不得手下员工有半点的闲暇,不断地催问着:做得怎么样了、应该完成了吧,然后丢过来更多的活,虽然也有认为学习提高重要,但绝不给你这个时间。

        因此,首要的是保持内心淡定,不能跟着老板浮燥,否则搞坏了情绪,不仅影响工作效率,而且影响学习兴趣,浮燥是一天,淡定也是一天,把握好尺度,做到忙里有闲、闲中有忙、工作不丢、学习不停、工作学习两不误。

如何发布

         从文件系统看,一个java应用程序,它的目录结构是按package来组织,它包含的文件有源文件.java、字节码文件.class、以及其它资源文件。其中.class文件是由.java文件编译生成,一个.class文件对应一个.java文件,通常就是一个java类(对象定义)。

        因此,一个java应用程序,最后是由分布在目录结构下的众多.class文件组成,它们都是将在Java虚拟机(JVM)上执行的目标代码,那么如何发布一个java应用呢,是不是就把这个目录结构丢出去呢。其实这样也是可以的,但更方便的是打包成一个文件。

        以目录结构发布的执行方法:

老兵学Java编程(3):如何发布

Java可执行文件:jar

         Java定义了自己的打包文件,即.jar文件,在Win7系统中,它的解释是可执行的jar文件:

老兵学Java编程(3):如何发布

         实际上,.jar文件可当作是java可执行文件,双击该文件就是启动运行,如有窗口界面则会弹出显示;这里是控制台程序,因此,可以在命令行下运行:

老兵学Java编程(3):如何发布

创建和操作jar文件

         JDK中包含有一个jar.exe工具,用于创建和处理.jar文件,其实也可以采用zip或winrar来压缩和解压缩.jar文件,只需要将其后缀名加上.zip或.rar即可。但jar工具创建的.jar包,会自动加入META-INF/MANIFEST.MF。

         创建一个.jar可执行文件:

老兵学Java编程(3):如何发布

         压缩包中内容如下:

老兵学Java编程(3):如何发布

         其中文件MANIFEST.MF内容为:

Manifest-Version: 1.0

Created-By: 1.7.0_03 (Oracle Corporation)

         这时,运行test.jar却不正确:

老兵学Java编程(3):如何发布

         需要在MANIFEST.MF文件中添加一行,确定主类:

Manifest-Version: 1.0

Created-By: 1.7.0_03 (Oracle Corporation)

Main-Class: HelloWorld

老兵学Java编程(3):如何发布

从实例中学习:weka

下载安装weka3.6.6

         Weka是一个开源的数据挖掘系统,这里下载当前的稳定版weka-3-6-6,包括三种发布形式:

(1)    Weka-3-6-6.exe:安装程序

(2)    Weka-3-6-6jre.exe:带JRE的安装程序

(3)    Weka-3-6-6.zip:直接解压安装,绿色程序

        Weka安装版和绿色版,安装及解压后的目录结构分别如下图左/右所示,安装版中增加一个RunWeka程序,两个快捷方式Weka3.6和Wek3.6(with console),以及一个卸载程序uninstall.exe,这种方式后面再研究。

运行weka.jar

        这里主要分析绿色版的简单打包方式,其中包括三个jar文件,weka.jar就是可执行的jar文件,我们可以直接双击运行,也可以在命令行下运行:

老兵学Java编程(3):如何发布

         尽管运行弹出了系统界面,但有错误报出,因为没有定义CLASSPATH环境变量,是不是找不到JDK的系统库中JDBC相关类?这个以后再说,另一发现是用javaw运行就不报错:

老兵学Java编程(3):如何发布

Weka.jar文件组成

         下面分析weka.jar的组成,可用zip/winrar打开,也可用JDK的jar.exe来操作,以下是显示列表和解压的命令:

老兵学Java编程(3):如何发布

 老兵学Java编程(3):如何发布

META-INF/MANIFEST.MF文件

老兵学Java编程(3):如何发布

        这里看出主类是weka/gui/GUIChooser.class,使用的是Apache的Ant工具进行打包,Ant工具非常有名,值得学习。

.class文件

         Weka的.class文件分布在Package组织的目录结构中,统计显示有2135个。

Weka-src.jar文件组成

.java文件

         这是weka的源文件,通过jar或winrar都可以解压,统计显示总共包含了1353个.java源文件。

META-INF/MANIFEST.MF文件

         这是源码打包,而非可执行jar,所以META-INF/MANIFEST.MF中无主类。

其它资源文件

         可以看到,一些资源文件,如.png图片文件、.gif图片文件、.properties数据库属性文件等,分布在相应的目录中。

build.xml和parsers.xml

         build.xml是Ant用来生成weka.jar的源文件,不仅能够编译所有的.java,并将生成的所有.class打包,还能设置主类。

lib目录

        lib目录下包括JFlex.jar、java-cup.jar、junit.jar三个jar文件,可能是系统需要的第三方库。

总结:从开源代码中学习

        从开源代码中学习,尤其选择工作或将来发展所需要的专业方向,应该是一种非常有效的途径。老兵选择数据挖掘工具weka来学习,希望既能学好Java,又能进入数据挖掘领域。

        通过前面分析,首先需要掌握的是:从源代码到目标码构建和发布这一过程,这样在阅读源码过程中,可以通过修改源代码,编译生成目标码,运行看到结果,实现对代码作用的直观认识。

        因此,开源代码分析过程所涉及的工作,总结如下:

(1)    通过Ant的build.xml,能够将源代码编译生成目标码并发布;

(2)    一个Java应用结构首先是在按package组织的目录结构;

(3)    类的层次结构,重要类的代码分析,参考API文档;

(4)    通过修改源代码,重新构建目标码来研究效果,掌握代码内含;

(5)    上述过程进一步在Eclipse中实现。