【Java】 java -jar 命令 传递系统参数 与 main函数参数 顺序

时间:2022-11-11 15:55:06


package com.liyao.runner;

/**
* 用法: java [-options] class [args...]
* (执行类)
* 或 java [-options] -jar jarfile [args...]
* (执行 jar 文件)
* 可以看到,jvm参数和程序参数的传参位置是不同的,jvm参数常见的是一些系统变量,会通过-D参数指定,这类型参数是[-options]里的,需要放在执行的主类名或者jar包之前,main函数参数放在最后,也就是主类名或者jar包后面
* 如果参数位置不对,则会导致程序内部获取不到参数,比如把-D类型的参数放到了最后,那么-D整体会被当做main函数的参数,而不是系统参数,具体可以输入java -jar,看下手册
*/
public class MyRunner {

/**
* case1:
* java -DmyEnv=haha -cp ./: com.liyao.runner.MyRunner abc
* envVar: haha
* arg1: abc
*
* case2:
* java -cp ./: com.liyao.runner.MyRunner -DmyEnv=haha abc
* envVar: null
* arg1: -DmyEnv=haha
* 获取不到系统参数,系统参数被当做main函数参数传入了
*/
public static void main(String[] args) {
String envVar = System.getProperty("myEnv");
System.out.println("envVar: " + envVar);

if (args.length > 0) {
String arg1 = args[0];
System.out.println("arg1: " + arg1);
}
}

/**
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server,
因为您是在服务器类计算机上运行。


-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 : 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
警告: 此功能已过时, 将在
未来发行版中删除。
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已过时, 将在
未来发行版中删除。
在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X 输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:<libname>[=<选项>]
加载本机代理库 <libname>, 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]
按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>
使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
*/
}