本文源码地址 。
一、原生方式 创建Maven项目,添加Main类
1 2 3 4 5 6 7 class Main { public static void main (String... argv) { for (String s : argv) { System.out.println(s); } } }
打包方式,参照2.1.1
运行命令,.jar
后面表示参数
1 java -jar mvn-command-1.0.jar 1 2 3 4
二、基于JCommander Java自带的命令行其实不是特别友好。通过引入第三方依赖,可以实现指定参数的效果。
基于JCommander参数式运行Jar包
原生Maven项目:mvn-command SpringBoot项目:springboot-command 2.1 原生Maven项目 2.1.1 打包项目 创建一个Maven项目,引入JCommaner依赖
1 2 3 4 5 <dependency > <groupId > com.beust</groupId > <artifactId > jcommander</artifactId > <version > 1.81</version > </dependency >
创建一个计算类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;public class Calc { @Parameter (names = {"--numberA" , "-a" }, description = "数字A" ) int a; @Parameter (names = {"--numberB" , "-b" }, description = "数字B" ) int b; @Parameter (names = {"--model" , "-m" }, description = "运算符,支持 + - x /" ) String model; @Parameter (names = "--help" , help = true ) boolean help; public static void main (String... args) { Calc main = new Calc(); JCommander jCommander = JCommander.newBuilder() .addObject(main) .build(); jCommander.parse(args); if (main.help) { jCommander.usage(); return ; } main.run(); } public void run () { int result; switch (model) { case "+" : result = a + b; break ; case "-" : result = a - b; break ; case "x" : result = a * b; break ; case "/" : result = a / b; break ; default : System.out.println("不支持的运算符" ); return ; } System.out.println(result); } }
配置打包所有依赖的插件,并指定入口函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <build > <plugins > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-shade-plugin</artifactId > <version > 1.2.1</version > <executions > <execution > <phase > package</phase > <goals > <goal > shade</goal > </goals > <configuration > <transformers > <transformer implementation ="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer" > <mainClass > top.meethigher.Calc</mainClass > </transformer > </transformers > </configuration > </execution > </executions > </plugin > </plugins > </build >
执行命令,生成jar包
1 mvn clean package -DskipTests
2.1.2 运行项目 执行命令
1 2 java -jar mvn-command-1.0.jar --help java -jar mvn-command-1.0.jar --model x -a 16 -b 8
2.2 SpringBoot项目 创建SpringBoot项目,将2.1.1的Calc拿过来,依赖也拿过来,然后打包。
运行命令
1 2 java -cp springboot-command-1.0.jar -Dloader.main=top.meethigher.line.Calc org.springframework.boot.loader.PropertiesLauncher --help java -cp springboot-command-1.0.jar -Dloader.main=top.meethigher.line.Calc org.springframework.boot.loader.PropertiesLauncher --model x -a 16 -b 8
三、参考致谢 JCommander
giraffe-tree/websocket-c10k: 使用 netty 实现 websocket 百万长连接, 包含服务端/客户端压测代码