|
2.1.3在虚拟机KVM上编译和运行代码
为了使用KVM编译和运行应用程序,你需要下载和安装如下的软件:
1. java 2 SDK或者带有java命令行编译器的开发环境
2. Sun的CLDC参考的实现
如果你还没有安装合适的java 2SDK,你可以在http://java.sun.com/j2se下载。
CLDC参考实现包含了源代码和sun的CLDC实现的文档,可以运行在微软的windows,Linux和Solaris平台,并且也包含了KVM和它的可执行工具。这个可以在http://java.sun.com/products/cldc/上获得。
参考实现是以档案的形式存放的,你必须把他解压到一个目录中。在接下来的几节中,我们将使用下面的变量来表示Java 2SDK和CLDC参考实现的安装目录:
%JAVA_HOME%(Windows)或者$JAVA_HOME(Linux/Solaris)
Java 2SDK的安装目录
%CLDC_HOME%(Windows)或者$CLDC_HOME(Linux/Solaris)
CLDC的安装目录,CLDC的解压缩目录是j2me_cldc,在这个目录下面。
%CLDC_PATH%(Windows)或者$CLDC_PATH(Linux/Solaris)
bin目录在CLDC的安装目录下面,等价于windows平台上的%CLDC_HOME%\j2me_cldc\bin
和Linux/Solaris平台上的$CLDC_HOME/j2me_cldc/bin。
/*代码说明略*/
首先,打开windows命令行(或者linux和solaris上的shell)并且设置 PATH变量来包含Java2SDK和CLDC的可知性文件。对于windows来说,使用如下的命令:
PATH=%JAVA_HOME%\bin;%CLDC_PATH%\win32;%PATH%
如果你是使用linux或者solaris,你需要使用合适的shell命令来保证你设置了正确的CLDC可执行文件,那就是$CLDC_PATH/linux or $CLDC_PATH/solaris.
其次,编译例子代码来生成class文件。为了简化命令,把你的工作目录设置为%EXAMPLES%\src,然后敲入如下的命令:
mkdir tmpclasses
javac -bootclasspath %CLDC_PATH%\common\api\classes -d tmpclasses
ora\ch2\HelloWorld.java
这些命令将会编译原文件,并且在tmpclasses目录下生成class文件。下面的几点值得注意:
1. 我们使用-d命令行选项来告诉编译器把class文件放在tmpclass目录下面,而不是在确省的原文件目录下。这是因为在使用之前,所有装载到KVM中的class文件必须进行预验证(参照2.1.1.3),这将会创建一个修改的class文件。我们将使用tmpclass目录下的类文件作为预验证的输入并且把修改多的class文件写入到原文件的目录。
2. 当运行java编译器的时候,我们使用了-bootclasspath选项来改变装载的java核心类的位置。就如你将在2.2节中看见,CLDC没有包含所有J2SE的包和类,所以我们只要让编译器装载CLDC核心库就可以了,而不是J2SE的(确省的类库)。如果我们没有这么做,就有可能编译 引用J2SE的API的代码。这将产生合法的代码,而当装载进入KVM的时候会导致错误。
在装载进入KVM之前,我们使用命令preverify来预验证代码。为了验证class文件并且把验证的版本写入原文件的相同目录,使用如下的命令:
preverify -classpath %CLDC_PATH%\common\api\classes;tmpclasses -d .
ora.ch2.HelloWorld
-classpath选项表示preverify搜索类的路径,-d表示预验证的类版本写入的位置。-classpath后面的路径在windows平台上以分号隔开(在linux或者solaris上以冒号隔开)注意与编译器需要原文件名不同的是,预验证器需要完整的java类名称。
如果需要验证一个以上的类的时候,有两种方法可以这样做。最直接的方法就是把需要验证的类列出来:
preverify -classpath %CLDC_PATH%\common\api\classes;tmpclasses -d .
ora.ch2.HelloWorld ora.ch2.Help
另外,如果我们在命令行上提供的目录,那么将会对这个目录下的所有类进行验证:
preverify -classpath %CLDC_PATH%\common\api\classes -d . tmpclasses
在这种情况下,我们没有必要在-classpath后面加上tmpclasses路径,因为我们已经在后面申明搜索路径了。
preverify命令的可选命令将会在第八章阐述。
最后,我们可以使用kvm来运行例子:
kvm -classpath . ora.ch2.HelloWorld
这将产生我们 熟悉的输出:
Hello, KVM world
注意classpath选项只需要指定ora.ch2.HelloWorld的路径。我们没有必要指定核心类的路径,因为KVM知道在那找到它们。 |
|
|
|
|
|
|