Aloha.class GutenTag.class Hello.class Hi.class Aloha.java GutenTag.java Hello.java Hi.java
指定用户类路径
对前面示例中的某个源文件进行更改后,重新编译它: C:> cd /examples
C:> javac greetings/Hi.java
由于 greetings.Hi 引用了 greetings 包中其它的类,编译器需要找到这些其它的类。上面的示例能运行是因为缺省的用户类路径刚好是含有包目录的目录。但是,假设我们想重新编译该文件并且不关心我们在哪个目录中的话, 我们需要将 /examples 添加到用户类路径中。可以通过设置 CLASSPATH 达到此目的,但这里我们将使用 -classpath 选项来完成。
C:>javac-classpath /examples /examples/greetings/Hi.java
如果再次将 greetings.Hi 改为使用标题实用程序,该实用程序也需要通过用户类路径来进行访问:
C:>javac-classpath /examples:/lib/Banners.jar / /examples/greetings/Hi.java
要执行 greetings 中的类,需要访问 greetings 和它所使用的类。 C:>java-classpath /examples:/lib/Banners.jar greetings.Hi
将源文件和类文件分开
将源文件和类文件置于不同的目录下经常是很有意义的,特别是在大型的项目中。我们用 -d 选项来指明单独的类文件目标位置。由于源文件不在用户类路径中,所以用-sourcepath 选项来协助编译器查找它们。 C:> dir
classes/ lib/ src/ C:> dir src farewells/
C:> dir src/farewells Base.java GoodBye.java C:> dir lib Banners.jar C:> dir classes
C:> javac -sourcepath src -classpath classes:lib/Banners.jar / src/farewells/GoodBye.java -d classes C:> dir classes farewells/
C:> dir classes/farewells Base.class GoodBye.class
注意:编译器也编译了 src/farewells/Base.java,虽然我们没有在命令行中指定它。要跟踪自动编译,可使用-verbose 选项。
联编程序示例
这里我们用 JDK 1.2 的 javac 来编译将在 1.1 版的虚拟机上运行的代码。 C:> javac-target 1.1 -bootclasspath jdk1.1.7/lib/classes.zip /
-extdirs \ -target 1.1
JDK 1.2 javac 在缺省状态下也将根据 1.2 版的自举类来进行编译,因此我们需要告诉 javac 让它根据 JDK 1.1 自举类来进行编译。可用 -bootclasspath 和 -extdirs 选项来达到此目的。不这样做的话,可能会使编译器根据 1.2 版的 API 来进行编译。由于1.1 版的虚拟机上可能没有该 1.2 版的 API,因此运行时将出错。
选项可确保生成的类文件与 1.1 版的虚拟机兼容。在 JDK1.2 中, 缺省情况下 javac 编译生成的文件是与1.1 版的虚拟机兼容的,因此并非严格地需要该选项。然而,由于别的编译器可能采用其它的缺省设置,所以提供这一选项将不失为是个好习惯。
java命令
(源文:
http://www.cnblogs.com/JeffChen/archive/2008/01/15/1039708.html) -classpath, 设定要搜索的类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有的CLASSPATH的设定。由于所要执行的类也是要搜索的类的一部分,所以一定要把这个类的路径也放到-classpath的设置里面。表现在,在要执行的类的路径里面执行java时,一定要添加上点号(.)标示本目录也要搜索。
假设abc.class在路径c:/src里面可以在任何路径下执行以下命令
java-classpath c:/classes; c:/jar/abc.jar;c:/zip/abc.zip;c:/src abc 问题:如果main.class属于c:/jar/abc.jar,并且在com.cnblogs.jeffchen这个包里,那么执行java -classpath
/classes;c:/jar/abc.jar;c:/zip/abc.zip;com.cnblogs.jeffchen.main即可。 在windows下,文件路径的分割符为反斜杠/,类或者java文件列表的分割符为分号;
在linux下,文件路径的分隔符位斜杠 /,类或者java文件列表的分隔符为冒号 :
一个linux下编译和运行的例子
/usr/local/java/bin/javac -classpath /tmp/javatest/lib/mail-1.3.3.jar -d /tmp/javatest/bin/ /tmp/javatest/src/jp/co/realseed/Capability.java /usr/local/java/bin/java-classpath
/tmp/javatest/lib/mail-1.3.3.jar:/tmp/javatest/bin/ jp.co.realseed.Capability
jar 命令详解
(源文:http://www.yuanma.org/data/2006/1020/article_1693.htm)
jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools.jar 文件。不过我们除了安装 JDK 什么也不需要做,因为 SUN 已经帮我们做好了。我们甚至不需要将 tools.jar 放到 CLASSPATH 中。
用法
使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:
-c 创建新的 JAR 文件包 -t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M]中的选项可以任选,也可以不选,它们是 jar 命令的选项参数 -v 生成详细报 告并打印到标准输出
-f 指定 JAR 文件名,通常这个参数是必须的 -m 指定需要包含的 MANIFEST 清单文件
-0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
-M 不产生所有项 的清单(MANIFEST〕文件,此参数会忽略 -m 参数 [jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数
[manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数
相关推荐: