java -Xms128m -Xmx128m -Dtest.mode=false -DConfigFolder=$codeHome/config -cp ${CLASSPATH} com.*.*.ClassName $instanceHome $1 $2 $3
首先:
The java tool launches a Java application. It does this by starting a Java runtime environment, loading a specified class, and invoking that class's main method.
The launcher has a set of standard options that are supported on the current runtime environment and will be supported in future releases. In addition, the default Java HotSpot VMs provide a set of non-standard options. The non-standard options are subject to change in future releases.
第一部分-Xms128m -Xmx128m:
这个属于non-standard options。
可参考
http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/java.html
第二部分-Dtest.mode=false -DConfigFolder=$codeHome/config:
这个需要参考一下System类下的getProperties方法。作用是determines the current system properties.
实际程序里用设置system properties来达到传递参数的目的。在launch程序时用-D传入参数(键值对的形式),在程序代码中的,某处get properties,就可以了。这样做的好处是传递参数比在main函数中传递简单,随传随用。其他好处不知道。
在程序中这样使用:configFolder = System.getProperty("ConfigFolder");
另外一点,在eclipse中运行一个程序时,可以设置两种参数:
program arguments:这个是main函数中传递进去的参数。
VM arguments:system.properties参数应该写在这个地方。还有前面说到的对虚拟机的设置等也应该在这个地方。
第三部分-cp ${CLASSPATH} com.*.*.ClassName $instanceHome $1 $2 $3
-
-cp
classpath 是java tool的参数。顾名思义,后面紧跟的
com.*.*.ClassName就是我们实际要运行的类了。而
$instanceHome $1 $2 $3则是传递到这个类的main函数的参数:
public static void main(String[] args) {
File instanceHome = new File(args[0]);
boolean Mode = (args.length == 2) && FORCE_PARAM.equals(args[1]);
...
}
当然了,$instanceHome $1 $2 $3的具体取值是ksh传入的。
所以在java代码中可以包含多个main函数(只要不产生混乱就行)。。。但是我们必须在运行时,明确的告诉虚拟机要运行哪一个。