NingG +

Java 命令详解,java

java命令

-cp 设定加载类路径

在JDK 7,存在-cp参数,具体参考:

在JDK 8,已经取消了-cp参数,详细参考:(是这样吗?)

-D arguments 参数

-D<name>=<value> set a system property 设置JVM系统属性;

在java源文件中,通过System.getProperty("<name>")即可获取上述设置的JVM系统属性;这种方式来传递属性,与main(String[] args)不同,因为-D<name>=<value>是JVM系统级的,在JVM上所有class文件中都可以获取,而main(String[] args)中,args默认是入口class的参数。

查看JVM内部所有的系统属性:System.getProperties().list(System.out);,我本地输出效果如下:(与本地通过env命令,查看的效果不同)

-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\Program Files\Java\jdk1.7.0_67\jre...
java.vm.version=24.65-b04
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=Service Pack 3
java.vm.specification.name=Java Virtual Machine Specification
user.dir=D:\Program-Files\workspace\TestBasic
java.runtime.version=1.7.0_67-b01
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\Program Files\Java\jdk1.7.0_67\jre...
os.arch=x86
java.io.tmpdir=C:\DOCUME~1\Luious\LOCALS~1\Temp\
line.separator=

java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows XP
sun.jnu.encoding=GBK
java.library.path=D:\Program Files\Java\jdk1.7.0_67\bin...

test_input=test_value

java.specification.name=Java Platform API Specification
java.class.version=51.0
sun.management.compiler=HotSpot Client Compiler
os.version=5.1
user.home=C:\Documents and Settings\Luious
user.timezone=Asia/Shanghai
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.7
user.name=cib
java.class.path=D:\Program-Files\workspace\TestBasic\bin
java.vm.specification.version=1.7
sun.arch.data.model=32
java.home=D:\Program Files\Java\jdk1.7.0_67\jre
sun.java.command=com.cib.time.TimE
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode, sharing
java.version=1.7.0_67
java.ext.dirs=D:\Program Files\Java\jdk1.7.0_67\jre...
sun.boot.class.path=D:\Program Files\Java\jdk1.7.0_67\jre...
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+m...

上述输出中:test_input=test_value,是我以-Dtest_input=test_value配置的。

通过-Djava.ext.dirs来设置-cp(类搜索路径)

通过-cp .;a.jar;b.jar来指定类加载的jar时,windows下使用;分隔,linux下使用:分隔,需要列出所有jar包(现在这一情况有没有改善?);如果希望通配符效果,使用:java -Djava.ext.dirs=...来替换-cp配置。

特别说明:不建议上述操作,具体:

虚拟机在运行一个类时,需要将其装入内存,虚拟机搜索类的方式和顺序如下:(双亲委派模式)

Bootstrap classesExtension classesUser classes

JVM系统环境与OS系统环境

上述System.getProperty("<name>")中System是指 JRE system,不是OS。

Eclipse下配置VM参数

在Eclipse下如何配置VM的启动参数?即,如何配置-D属性?具体:run asrun configurationsArgumentsVM arguments,直接书写-D<name>=<value>即可,(多参数时,分行输入)

扩展阅读

参考来源

主要参考:Java的官方文档

Top