言成言成啊 | Kit Chen's Blog

命令行式Jar包

发布于2023-03-06 22:22:53,更新于2023-05-04 22:45:18,标签:java  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

本文源码地址

一、原生方式

创建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">
<!--jar包的入口函数-->
<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 百万长连接, 包含服务端/客户端压测代码

发布:2023-03-06 22:22:53
修改:2023-05-04 22:45:18
链接:https://meethigher.top/blog/2023/java-command/
标签:java 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏