良玉的博客 点点滴滴,积水成河_良玉的博客_页游、手游linux运维工程师之路

linux java命令

    

今天想看看linux下执行java命令所带的参数,于是写了一个test class,超级简单,就是只输出参数:

package abc;

import java.util.Arrays;

public class test {

 public static void main(String[] args) {
          System.out.println(Arrays.toString(args));
 }

}

 

然后打成TEST.jar,在linux下验证了一下:

/opt/app/dev/wangli$ java -cp TEST.jar -Dfile.encoding=gbk abc.test CKIFPD.cfg
[CKIFPD.cfg]
/opt/app/dev/wangli$ java -jar TEST.jar -Dfile.encoding=gbk abc.test CKIFPD.cfg
[-Dfile.encoding=gbk, abc.test, CKIFPD.cfg]

 

第一种写法输出只有[CKIFPD.cfg]
第二种写法输出[-Dfile.encoding=gbk, abc.test, CKIFPD.cfg]

 

为什么呢?java命令中从哪开始算args呢?再次在linux中验证如下:

/opt/app/dev/wangli$ java -?

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include:
    -d32          use a 32-bit data model if available
    -d64          use a 64-bit data model if available
    -server       to select the "server" VM
                  The default VM is server.

    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose[:class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -jre-no-restrict-search
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions with specified granularity
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                  see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image
See http://java.sun.com/javase/reference for more details.

 

至此,结果很明了,两种写法:

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)


所以,上文中,

我的第一种写法:java -cp TEST.jar -Dfile.encoding=gbk abc.test CKIFPD.cfg
JVM理解成了执行一个class,即java [-options] class [args...],所以class abc.test后面的被当成了args;

 

我的第二种写法:java -jar TEST.jar -Dfile.encoding=gbk abc.test CKIFPD.cfg
JVM理解成了执行一个jar,即java [-options] -jar jarfile [args...],所以-jar TEST.jar后面的都被当成了args。

    

标签: linuxjava命令

作者:良玉 分类:Linux 浏览:589 评论:0
留言列表
发表评论
来宾的头像