热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java命令运行

Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启

Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOME"bin"java –option 来启动,-option为虚拟机参数,JAVA_HOME为JDK安装路径,通过这些参数可对虚拟机的运行状态进行调整,掌握参数的含义可对虚拟机的运行模式有更深入理解。

一、         查看参数列表:
虚拟机参数分为基本和扩展两类,在命令行中输入JAVA_HOME"bin"java 就可得到基本参数列表,在命令行输入JAVA_HOME"bin"java –X 就可得到扩展参数列表。
二、         基本参数说明:
1.     -client,-server
这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。相反,server模式启动比client慢,但可获得更高的运行性能。
在 windows上,缺省的虚拟机类型为client模式,如果要使用 server模式,就需要在启动虚拟机时加-server参数,以获得更高性能,对服务器端应用,推荐采用server模式,尤其是多个CPU的系统。在 Linux,Solaris上缺省采用server模式。

2.     -hotspot
含义与client相同,jdk1.4以前使用的参数,jdk1.4开始不再使用,代之以client。
3.     -classpath,-cp
虚拟机在运行一个类时,需要将其装入内存,虚拟机搜索类的方式和顺序如下:
Bootstrap classes,Extension classes,User classes。
Bootstrap 中的路径是虚拟机自带的jar或zip文件,虚拟机首先搜索这些包文件,用System.getProperty("sun.boot.class.path")可得到虚拟机搜索的包名。
Extension是位于jre"lib"ext目录下的jar文件,虚拟机在搜索完Bootstrap后就搜索该目录下的jar文件。用System. getProperty("java.ext.dirs”)可得到虚拟机使用Extension搜索路径。
User classes搜索顺序为当前目录、环境变量 CLASSPATH、-classpath。
4.     -classpath
告知虚拟机搜索目录名、jar文档名、zip文档名,之间用分号;分隔。
例如当你自己开发了公共类并包装成一个common.jar包,在使用 common.jar中的类时,就需要用-classpath common.jar 告诉虚拟机从common.jar中查找该类,否则虚拟机就会抛出java.lang.NoClassDefFoundError异常,表明未找到类定义。
在运行时可用System.getProperty(“java.class.path”)得到虚拟机查找类的路径。

使用-classpath后虚拟机将不再使用CLASSPATH中的类搜索路径,如果-classpath和CLASSPATH都没有设置,则虚拟机使用当前路径(.)作为类搜索路径。
推荐使用-classpath来定义虚拟机要搜索的类路径,而不要使用环境变量 CLASSPATH的搜索路径,以减少多个项目同时使用CLASSPATH时存在的潜在冲突。例如应用1要使用a1.0.jar中的类G,应用2要使用 a2.0.jar中的类G,a2.0.jar是a1.0.jar的升级包,当a1.0.jar,a2.0.jar都在CLASSPATH中,虚拟机搜索到第一个包中的类G时就停止搜索,如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。
5.     -D=value
在虚拟机的系统属性中设置属性名/值对,运行在此虚拟机之上的应用程序可用System.getProperty(“propertyName”)得到value的值。
如果value中有空格,则需要用双引号将该值括起来,如-Dname=”space string”。
该参数通常用于设置系统级全局变量值,如配置文件路径,应为该属性在程序中任何地方都可访问。


6.    -verbose[:class|gc|jni]
在输出设备上显示虚拟机运行信息。
verbose和verbose:class含义相同,输出虚拟机装入的类的信息,显示的信息格式如下:
[Loaded java.io.FilePermission$1 from shared objects file]
当虚拟机报告类找不到或类冲突时可用此参数来诊断来查看虚拟机从装入类的情况。
7.     -verbose:gc
在虚拟机发生内存回收时在输出设备显示信息,格式如下:
[Full GC 268K->168K(1984K), 0.0187390 secs]
该参数用来监视虚拟机内存回收的情况。
8.     -verbose:jni
在虚拟机调用native方法时输出设备显示信息,格式如下:
[Dynamic-linking native method HelloNative.sum ... JNI]
该参数用来监视虚拟机调用本地方法的情况,在发生jni错误时可为诊断提供便利。
9.     -version
显示可运行的虚拟机版本信息然后退出。一台机器上装有不同版本的JDK时
10.-showversion
显示版本信息以及帮助信息。 内容来自dedecms
11.-ea[:...|:]
12.-enableassertions[:...|:]
从JDK1.4开始,java可支持断言机制,用于诊断运行时问题。通常在测试阶段使断言有效,在正式运行时不需要运行断言。断言后的表达式的值是一个逻辑值,为true时断言不运行,为false时断言运行,抛出java.lang.AssertionError错误。
上述参数就用来设置虚拟机是否启动断言机制,缺省时虚拟机关闭断言机制,用-ea 可打开断言机制,不加和classname时运行所有包和类中的断言,如果希望只运行某些包或类中的断言,可将包名或类名加到-ea之后。例如要启动包com.foo.util中的断言,可用命令 –ea:com.foo.util 。
13.-da[:...|:]
14.-disableassertions[:...|:]
用来设置虚拟机关闭断言处理,packagename和classname的使用方法和-ea相同。
15.-esa | -enablesystemassertions
设置虚拟机显示系统类的断言。
16.-dsa | -disablesystemassertions
设置虚拟机关闭系统类的断言。 dedecms.com
17.-agentlib:[=]
该参数是JDK5新引入的,用于虚拟机装载本地代理库。
Libname 为本地代理库文件名,虚拟机的搜索路径为环境变量PATH中的路径,options为传给本地库启动时的参数,多个参数之间用逗号分隔。在Windows 平台上虚拟机搜索本地库名为libname.dll的文件,在Unix上虚拟机搜索本地库名为libname.so的文件,搜索路径环境变量在不同系统上有所不同,Linux、SunOS、IRIX上为LD_LIBRARY_PATH,AIX上为LIBPATH,HP-UX上为SHLIB_PATH。
例如可使用-agentlib:hprof来获取虚拟机的运行情况,包括CPU、内存、线程等的运行数据,并可输出到指定文件中,可用-agentlib:hprof=help来得到使用帮助列表。在jre"bin目录下可发现hprof.dll文件。
18. -agentpath:[=]
设置虚拟机按全路径装载本地库,不再搜索PATH中的路径。其他功能和agentlib相同。
19.-javaagent:[=]
虚拟机启动时装入java语言设备代理。Jarpath文件中的mainfest 文件必须有Agent-Class属性。代理类要实现public static void premain(String agentArgs, Instrumentation inst)方法。当虚拟机初始化时,将按代理类的说明顺序调用premain方法。 copyright dedecms
参见:java.lang.instrument
三、         扩展参数说明
1.     -Xmixed
设置-client模式虚拟机对使用频率高的方式进行Just-In-Time编译和执行,对其他方法使用解释方式执行。该方式是虚拟机缺省模式。
2.     -Xint
设置-client模式下运行的虚拟机以解释方式执行类的字节码,不将字节码编译为本机码。
3.     -Xbootclasspath:path
4.     -Xbootclasspath/a:path
5.     -Xbootclasspath/p:path
改变虚拟机装载缺省系统运行包rt.jar而从-Xbootclasspath中设定的搜索路径中装载系统运行类。除非你自己能写一个运行时,否则不会用到该参数。
/a:将在缺省搜索路径后加上path 中的搜索路径。
/p:在缺省搜索路径前先搜索path中的搜索路径。
6.     -Xnoclassgc
关闭虚拟机对class的垃圾回收功能。
7.     -Xincgc
启动增量垃圾收集器,缺省是关闭的。增量垃圾收集器能减少偶然发生的长时间的垃圾回收造成的暂停时间。但增量垃圾收集器和应用程序并发执行,因此会占用部分CPU在应用程序上的功能。
8.     -Xloggc:
将虚拟机每次垃圾回收的信息写到日志文件中,文件名由file指定,文件格式是平文件,内容和-verbose:gc输出内容相同。
9.     -Xbatch
虚拟机的缺省运行方式是在后台编译类代码,然后在前台执行代码,使用-Xbatch参数将关闭虚拟机后台编译,在前台编译完成后再执行。
10.-Xms
设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为1024的整数倍并且要大于1MB,可用k(K)或m(M)为单位来设置较大的内存数。初始堆大小为2MB。
例如:-Xms6400K,-Xms256M
11.-Xmx
设置虚拟机内存堆的最大可用大小,缺省单位为字节。该值必须为1024整数倍,并且要大于2MB。可用k(K)或m(M)为单位来设置较大的内存数。缺省堆最大值为64MB。
例如:-Xmx81920K,-Xmx80M
当应用程序申请了大内存运行时虚拟机抛出java.lang.OutOfMemoryError: Java heap space错误,就需要使用-Xmx设媒洗蟮目捎媚诖娑选?BR>
12.-Xss
设置线程栈的大小,缺省单位为字节。与-Xmx类似,也可用K或M来设置较大的值。通常操作系统分配给线程栈的缺省大小为1MB。
另外也可在java中创建线程对象时设置栈的大小,构造函数原型为Thread(ThreadGroup group, Runnable target, String name, long stackSize)。
13.-Xprof
输出CPU运行时的诊断信息。
14.-Xfuture
对类文件进行严格格式检查,以保证类代码符合类代码规范。为保持向后兼容,虚拟机缺省不进行严格的格式检查。
15.-Xrs
减少虚拟机中操作系统的信号(singals)的使用。该参数通常用在虚拟机以后台服务方式运行时使用(如Servlet)。
16.-Xcheck:jni

一、运行class文件
执行带main方法的class文件,命令行为:
java 
注意:CLASS文件名不要带文件后缀.class
例如:
java Test
如果执行的class文件是带包的,即在类文件中使用了:
package <包名>
那应该在包的基路径下执行&#xff0c;命令行为&#xff1a;
java <包名>.CLASS文件名
例如&#xff1a;
PackageTest.java中&#xff0c;其包名为&#xff1a;com.ee2ee.test&#xff0c;对应的语句为&#xff1a;
package com.ee2ee.test;
PackageTest.java及编译后的class文件PackageTest.class的存放目录如下&#xff1a;
classes
  |__com
      |__ee2ee
           |__test
                |__PackageTest.java
                |__PackageTest.class

要运行PackageTest.class&#xff0c;应在classes目录下执行&#xff1a;
java com.ee2ee.test.PackageTest 
二、运行jar文件中的class
原理和运行class文件一样&#xff0c;只需加上参数-cp 即可。
例如&#xff1a;执行test.jar中的类com.ee2ee.test.PackageTest&#xff0c;命令行如下&#xff1a;
java -cp test.jar com.ee2ee.test.PackageTest 
三、显示jdk版本信息
当一台机器上有多个jdk版本时&#xff0c;需要知道当前使用的是那个版本的jdk&#xff0c;使用参数-version即可知道其版本&#xff0c;命令行为&#xff1a;
java -version 
四、增加虚拟机可以使用的最大内存
java虚拟机可使用的最大内存是有限制的&#xff0c;缺省值通常为64MB或128MB。
如果一个应用程序为了提高性能而把数据加载内存中而占用较大的内存&#xff0c;比如超过了默认的最大值128MB&#xff0c;需要加大java虚拟机可使用的最大内存&#xff0c;否则会出现Out of Memory&#xff08;系统内存不足&#xff09;的异常。启动java时&#xff0c;需要使用如下两个参数&#xff1a;
-Xms java虚拟机初始化时使用的内存大小
-Xmx java虚拟机可以使用的最大内存
以上两个参数中设置的size&#xff0c;可以带单位&#xff0c;例如&#xff1a;256m表示256MB
举例说明&#xff1a;
java -Xms128m -Xmx256m ...
表示java虚拟机初始化时使用的内存为128MB&#xff0c;可使用的最大内存为256MB。
对于tomcat&#xff0c;可以修改其脚本catalina.sh&#xff08;unix平台&#xff09;或catalina.bat&#xff08;windows平台&#xff09;&#xff0c;设置变量JAVA_OPTS即可&#xff0c;例如&#xff1a;
JAVA_OPTS&#61;&#39;-Xms128m -Xmx256m&#39; 

在控制台输出信息中&#xff0c;有个-X&#xff08;注意是大写&#xff09;的命令&#xff0c;这个正是查看JVM配置参数的命令。

其次&#xff0c;用java -X 命令查看JVM的配置说明&#xff1a;
运行后如下结果&#xff0c;这些就是配置JVM参数的秘密武器&#xff0c;这些信息都是英文的&#xff0c;为了方便阅读&#xff0c;我根据自己的理解翻译成中文了&#xff08;不准确的地方还请各位博友斧正&#xff09;
-----------------------------------------------------------------------
D:\j2sdk15\bin>java -X
    -Xmixed           mixed mode execution (default)
    -Xint             interpreted mode execution only
    -Xbootclasspath:
                      set search path for bootstrap classes and resources
    -Xbootclasspath/a:
                      append to end of bootstrap class path
    -Xbootclasspath/p:
                      prepend in front of bootstrap class path
    -Xnoclassgc       disable class garbage collection
    -Xincgc           enable incremental garbage collection
    -Xloggc:    log GC status to a file with time stamps
    -Xbatch           disable background compilation
    -Xms        set initial Java heap size
    -Xmx        set maximum Java heap size
    -Xss        set java thread stack size
    -Xprof            output cpu profiling data
    -Xfuture          enable strictest checks, anticipating future default
    -Xrs              reduce use of OS signals by Java/VM (see documentation)
    -Xcheck:jni       perform. additional checks for JNI functions
    -Xshare:off       do not attempt to use shared class data
    -Xshare:auto      use shared class data if possible (default)
    -Xshare:on        require using shared class data, otherwise fail.
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
JVM配置参数中文说明&#xff1a;
-----------------------------------------------------------------------
1、-Xmixed           mixed mode execution (default)
 混合模式执行
 
2、-Xint             interpreted mode execution only
 解释模式执行
 
3、-Xbootclasspath:
      set search path for bootstrap classes and resources
 设置zip/jar资源或者类&#xff08;.class文件&#xff09;存放目录路径
 
3、-Xbootclasspath/a:
      append to end of bootstrap class path
 追加zip/jar资源或者类&#xff08;.class文件&#xff09;存放目录路径
 
4、-Xbootclasspath/p:
      prepend in front of bootstrap class path
 预先加载zip/jar资源或者类&#xff08;.class文件&#xff09;存放目录路径
 
5、-Xnoclassgc       disable class garbage collection
 关闭类垃圾回收功能
 
6、-Xincgc           enable incremental garbage collection
 开启类的垃圾回收功能
 
7、-Xloggc:    log GC status to a file with time stamps
 记录垃圾回日志到一个文件。
 
8、-Xbatch           disable background compilation
 关闭后台编译
 
9、-Xms        set initial Java heap size
 设置JVM初始化堆内存大小
 
10、-Xmx        set maximum Java heap size
 设置JVM最大的堆内存大小
 
11、-Xss        set java thread stack size
 设置JVM栈内存大小
 
12、-Xprof            output cpu profiling data
 输入CPU概要表数据
 
13、-Xfuture          enable strictest checks, anticipating future default
 执行严格的代码检查&#xff0c;预测可能出现的情况
 
14、-Xrs              reduce use of OS signals by Java/VM (see documentation)
 通过JVM还原操作系统信号
 
15、-Xcheck:jni       perform. additional checks for JNI functions
 对JNI函数执行检查
 
16、-Xshare:off       do not attempt to use shared class data
 尽可能不去使用共享类的数据
 
17、-Xshare:auto      use shared class data if possible (default)
 尽可能的使用共享类的数据
 
18、-Xshare:on       require using shared class data, otherwise fail.
 尽可能的使用共享类的数据&#xff0c;否则运行失败
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
怎么用这这些参数呢&#xff1f;其实所有的命令行都是这么一用&#xff0c;下面我就给出一个最简单的HelloWorl的例子来演示这个参数的用法&#xff0c;非常的简单。
 
HelloWorld.java
-----------------------------------------------
public class  HelloWorld
{
 public static void main(String[] args)
 {
  System.out.println("Hello World!");
 }
}
 
编译并运行&#xff1a;
D:\j2sdk15\bin>javac HelloWorld.java
 
D:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld
Hello World!
 
呵呵&#xff0c;这下满足了吧&#xff01;
 
实践&#xff1a;在大型系统或者应用中配置JVM参数
比如你配置IDE工具的参数&#xff0c;常见的有IDEA、Eclipse&#xff0c;这个是在一个配置文件中指定即可。
如果你要在J2EE环境中配置这些参数&#xff0c;那么你需要在J2EE应用服务器或者Servlet容器相关启动参数设置处指定&#xff0c;其启动文件中来配置&#xff0c;Tomcat是在catalina.bat中配置&#xff0c;weblogic和websphere是在其他地方&#xff0c;具体我就说了&#xff0c;相信玩过的这些大型服务器的人都知道&#xff0c;没玩过的看看这篇文章&#xff0c;玩玩就知道了&#xff0c;呵呵。
另外常常有人问到jdk的一些相关命令用法&#xff0c;其实&#xff0c;当你看到这里的时候&#xff0c;你应该知道如何获取这些命令的用法了。如果你还不会&#xff0c;那么&#xff0c;建议你去学学DOS&#xff0c;我是没辙了。如果你会这些&#xff0c;还是没有看明白&#xff0c;那么你赶紧学学英语吧&#xff0c;这样你就能看懂了。




一, 类路径 (class path)


当你满怀着希望安装好了 java, 然后兴冲冲地写了个 hello world,然后编译,


运行, 就等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can&#39;t find


class HelloWorld 或者 Exception in thread "main" java.lang.NoSuchMethodError


: maain.


为什么呢? 编译好的 class 明明在呀.


我们一起来看一看 java 程序的运行过程. 我们已经知道 java 是通过 java


虚拟机来解释运行的, 也就是通过 java 命令, javac 编译生成的 .class


文件就是虚拟机要执行的代码, 称之为字节码(bytecode), 虚拟机通过 classloader


来装载这些字节码, 也就是通常意义上的类. 这里就有一个问题, classloader 从


哪里知道 java 本身的类库及用户自己的类在什么地方呢? 或者有着缺省值(当前路径)


.


或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath), 或者在运行


的时候传参数给虚拟机. 这也就是指明 classpath 的三个方法. 编译的过程和运行


的过程大同小异, 只是一个是找出来编译, 另一个是找出来装载.


实际上 java 虚拟机是由 java luncher 初始化的, 也就是 java (或 java.exe)


这个程序来做的. 虚拟机按以下顺序搜索并装载所有需要的类:


1, 引导类: 组成 java 平台的类, 包含 rt.jar 和 i18n.jar 中的类.


2, 扩展类: 使用 java 扩展机制的类, 都是位于扩展目录($JAVA_HOME/jre/lib/e


xt)


中的 .jar 档案包.


3, 用户类: 开发者定义的类或者没有使用 java 扩展机制的第三方产品. 你必须在




命令行中使用 -classpath 选项或者使用 CLASSPATH 环境变量来确定这些类的位置. 我




们在上面所说的用户自己的类就是特指这些类.


这样, 一般来说, 用户只需指定用户类的位置, 引导类和扩展类是"自动"寻找的.


那么到底该怎么做呢? 用户类路径就是一些包含类文件的目录, .jar, .zip 文件的




列表, 至于类具体怎么找, 因为牵扯到 package 的问题, 下面将会说到, 暂时可认为


只要包含了这个类就算找到了这个类. 根据平台的不同分隔符略有不同, 类 unix 的系




统基本上都是 ":", windows 多是 ";". 其可能的来源是:


* ".", 即当前目录, 这个是缺省值.


* CLASSPATH 环境变量, 一旦设置, 将缺省值覆盖.


* 命令行参数 -cp 或者 -classpath, 一旦指定, 将上两者覆盖.


* 由 -jar 参数指定的 .jar 档案包, 就把所有其他的值覆盖, 所有的类都来自这


个指


定的档案包中. 由于生成可执行的 .jar 文件, 还需要其他一些知识, 比如 package, 


还有


特定的配置文件, 本文的最后会提到. 可先看看 jdk 自带的一些例子.


我们举个 HelloWorld 的例子来说明. 先做以下假设:


* 当前目录是 /HelloWorld (或 c:/HelloWorld, 以后都使用前一个)


* jdk 版本为 1.2.2 (linux 下的)


* PATH 环境变量设置正确. (这样可以在任何目录下都可以使用工具)


* 文件是 HelloWorld.java, 内容是:


public class HelloWorld


{


public static void main(String[] args)


{


System.out.println("Hello World!/n");


System.exit(0);


}


}


首先这个文件一定要写对, 如果对 c 熟悉的话, 很有可能写成这样:


public static void main(int argc, String[] argv)


{


....


}


这样是不对的, 不信可以试一试. 由于手头没有 java 的规范, 所以


作如下猜想: java 的 application 程序, 必须以 public static void main(String[


])


开始, 其他不一样的都不行.


到现在为止, 我们设置方面只设置了 PATH.


1, 当前路径就是指你的 .class 文件在当前目录下,


[HelloWorld]$ javac HelloWorld.java //这一步不会有多大问题,


[HelloWorld]$ java HelloWorld // 这一步可能就会有问题.


如果出了象开头那样的问题, 首先确定不是由于敲错命令而出错. 如果没有敲错命


令,


那么接着做:


[HelloWorld]$ echo $CLASSPATH


或者


c:/HelloWorld>echo %CLASSPATH%


看看 CLASSPATH 环境变量是否设置了, 如果设置了, 那么用以下命令:


[HelloWorld]$ CLASSPATH&#61;


或者


c:/HelloWorld> set CLASSPATH&#61;


来使它为空, 然后重新运行. 这次用户类路径缺省的是 ".", 所以应该不会有相


同的问题了. 还有一个方法就是把 "." 加入到 CLASSPATH 中.


[/]$ CLASSPATH&#61;$CLASSPATH:.


或者


c:/HelloWorld> set CLASSPATH&#61;%CLASSPATH%;.


同样也可以成功. Good Luck.


2, 当你的程序需要第三方的类库支持, 而且比较常用, 就可以采用此种方法.比如





用的数据库驱动程序, 写 servlet 需要的 servlet 包等等. 设置方法就是在环境变量





加入 CLASSPATH. 然后就可以直接编译运行了. 还是以 HelloWorld 为例, 比如你想在





目录中运行它, 那么你直接在根目录下执行


$ java HelloWorld


或者


c:/>java HelloWorld


这样肯定会出错, 如果你的 CLASSPATH 没有改动的话. 我想大家应该知道为什么错





吧, 那么怎么改呢? 前面说过, 用户类路径就是一些包含你所需要的类的目录, .jar 档





包, .zip 包. 现在没有生成包, 所以只好把 HelloWorld.class 所在的目录加到 CLAS


SPAT


了, 根据前面的做法, 再运行一次, 看看, 呵呵, 成功了, 换个路径, 又成功了!! 不仅


仅?br /> 以直接运行其中的类, 当你要 import 其中的某些类时, 同样处理.


不知道你想到没有, 随着你的系统的不断的扩充, (当然了, 都是一些需要 java 的


东挝?


如果都加到这个环境变量里, 那这个变量会越来越臃肿, 虽然环境变量空间可以开很大


, 总


觉得有些不舒服. 看看下面一个方法.


3, 在命令行参数中指明 classpath.


还是和上面相同的目标, 在任何目录下执行 HelloWorld, 用这个方法怎么实现呢?




[/]$ java -cp /HelloWorld HelloWorld


或者


c:/>java -cp c:/HelloWorld HelloWorld


就可以了. 这是这种方法的最简单的应用了. 当你使用了另外的包的时候, 还可以


采用用?br /> 种方法. 例如:


$ javac -classpath aPath/aPackage.jar:. myJava.java


$ java -cp aPath/aPackage.jar:. myJava


或者


c:/> javac -classpath aPath/aPackage.jar;. myJava.java


c:/> java -cp aPath/aPackage.jar;. myJava


这种方法也有一个不方便的的地方就是当第三方包所在的路径较长或者需要两个以


上包包?br /> 时候, 每次编译运行都要写很长, 非常不方便, 这时候可以写脚本来解决. 比


如一个例子:


compile (文件, 权限改为可执行, 当前目录)


$ cat compile


---------------------------


#!/bin/bash


javac -classpath aPath/aPackage.jar:anotherPath/anotherPackage.jar:. m


yJavva.java


---------------------------


run (文件, 权限改为可执行, 当前目录)


$cat run


---------------------------


#!/bin/bash


java -cp aPath/aPackage.jar:anotherPath/anotherPackage.jar:. myJava


---------------------------


或者:


compile.bat


c:/HelloWorld> type compile.bat


-------------------------


javac -classpath aPath/aPackage.jar:anotherPath/anotherPackage.jar:. m


yJavva.java


-------------------------


run.bat


c:/HelloWorld> type run.bat


------------------------


java -cp aPath/aPackage.jar:anotherPath/anotherPackage.jar:. myJava


------------------------


就可以了. 试试看.


前面提到了扩展类, 扩展类是什么呢? java 的扩展类就是应用程序开发者用来


扩展核心平台功能的 java 类的包(或者是 native code). 虚拟机能像使用系统类一


样使用这些扩展类. 有人建议可以把包放入扩展目录里, 这样, CLASSPATH 也不用设了


,


也不用指定了, 岂不是很方便? 确实可以正确运行, 但是个人认为这样不好, 不能什么




东西都往里搁, 一些标准的扩展包可以, 比如, JavaServlet, Java3D 等等. 可以提个




建议, 加一个环境变量, 比如叫 JARPATH, 指定一个目录, 专门存放用户的 jar zip


等包, 这个要等 SUN 公司来做了.


windows98 下, 我原来安装的时候, 一直装不上, 总是死机, 好不容易装上了, 缺




省的是不能运行正确的, 然后把 tool.jar 放入 CLASSPATH 后工作正常. 现在作测试,




去掉仍然是正确的. 经过多次测试, 发现如果原来曾装过 jdk 的都很好, 没有装过的


装的时候会死机, 多装几次就可以了. 如果你发现正确安装后, 不能正常工作, 就把


tools.jar 加入 CLASSPATH, 试一下.
推荐阅读
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
author-avatar
萱萱loveTFOOYS
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有