有没有想过创建一个启动速度比你说“Java”还快的CLI应用程序?那么,系好安全带,因为我们即将进入Quarkus驱动的命令行魔法世界!
还记得启动Java应用程序时的感觉吗?就像在等待奶奶讲完她的旧时光故事?那些日子已经过去了,朋友。迎接Quarkus:这个超级英雄框架将拯救我们于启动缓慢和内存消耗大的应用程序的暴政中。
为什么选择Quarkus用于CLI?因为我们可以!
说实话:用传统的Java框架构建CLI应用程序就像看油漆干一样无聊。但Quarkus呢?它就像给你的CLI应用程序注入了一剂浓缩咖啡。原因如下:
- 启动速度极快(我们说的是毫秒,而不是喝咖啡的时间)
- 内存占用比你猫的Instagram粉丝还少
- 本地编译让你的应用程序感觉像是用C语言编写的(但没有段错误)
- 热重载是真正的热,而不是像办公室咖啡那样温吞
设置你的Quarkus CLI游乐场
首先,让我们动手操作。打开你的终端,让我们创建一个Quarkus项目,比你说“又是Maven Central宕机”还快:
mvn io.quarkus:quarkus-maven-plugin:2.16.5.Final:create \
-DprojectGroupId=com.example \
-DprojectArtifactId=quarkus-cli-demo \
-DclassName="com.example.CliCommand" \
-Dpath="/hello" \
-Dextensions="quarkus-picocli"
cd quarkus-cli-demo
砰!你刚刚创建了一个支持Picocli的Quarkus项目。这就像魔法,但适合懒惰的开发者。
Quarkus CLI应用程序的结构
现在,让我们看看我们崭新的CLI应用程序的内部。打开CliCommand.java
,欣赏这段代码:
@CommandLine.Command(name = "greeting", mixinStandardHelpOptions = true)
public class CliCommand implements Runnable {
@CommandLine.Option(names = {"-n", "--name"}, description = "Who to greet", defaultValue = "World")
String name;
@Override
public void run() {
System.out.println("Hello " + name + "!");
}
}
这段小代码是你的CLI应用程序的核心。它简单、优雅,并且可以打招呼。你还想要什么呢?
让它做点事:有趣的部分
打招呼很好,但让我们让我们的CLI做一些更有趣的事情。比如一个天气获取器?因为谁不喜欢谈论天气呢?
@CommandLine.Command(name = "weather", mixinStandardHelpOptions = true)
public class WeatherCommand implements Runnable {
@CommandLine.Option(names = {"-c", "--city"}, description = "City to check weather for", required = true)
String city;
@Inject
WeatherService weatherService;
@Override
public void run() {
String weather = weatherService.getWeather(city);
System.out.println("Weather in " + city + ": " + weather);
}
}
现在我们开始动真格的了!这个命令使用依赖注入来获取天气数据。Quarkus让这一切变得非常简单。
秘密武器:本地镜像
这就是Quarkus真正闪耀的地方。让我们把我们的Java应用程序变成一个精简的本地可执行文件:
./mvnw package -Pnative
去喝杯咖啡,做些俯卧撑,或者思考人生的意义。当你回来时,你将拥有一个启动速度比眨眼还快的本地可执行文件。
测试:因为我们是专业人士
我们不能在没有测试的情况下发布这个杰作,对吧?Quarkus为我们提供了支持:
@QuarkusTest
public class WeatherCommandTest {
@Test
public void testWeatherCommand() {
CommandLine.ParseResult pr = new CommandLine(new WeatherCommand()).parseArgs("-c", "London");
Assertions.assertTrue(pr.hasMatchedOption("c"));
Assertions.assertEquals("London", pr.matchedOption("c").getValue());
}
}
运行这个测试,如果通过了,恭喜你!你现在正式成为一名Quarkus CLI开发者。
真实世界的例子:因为理论很无聊
让我们来点实际的。想象一下你正在构建一个用于管理公司云基础设施的CLI工具。你可以使用Quarkus创建以下命令:
- 启动新服务器
- 部署应用程序
- 监控资源使用
以下是可能的样子:
@CommandLine.Command(name = "cloud-manage", subcommands = {
SpinUpCommand.class,
DeployCommand.class,
MonitorCommand.class
})
public class CloudManageCli implements Runnable {
@Override
public void run() {
System.out.println("Welcome to Cloud Manager CLI!");
}
}
每个子命令都可以与不同的云API交互,同时受益于Quarkus的快速启动和低内存使用。
震撼时刻
所以,这就是全部,朋友们。我们已经走过了Quarkus CLI应用程序的旅程,从谦逊的开始到云管理的伟大。我们学到了什么:
- Quarkus让CLI应用程序变得非常快。
- 本地镜像是实现瞬时启动的秘密武器。
- CLI应用程序中的依赖注入?Quarkus说“为什么不呢?”
- 测试很简单,所以你没有理由不去做。
- 真实世界的应用程序只受你的想象力限制(也许还有你的咖啡摄入量)。
下次有人让你构建CLI工具时,不要满足于同样无聊的Java应用程序。展示你的Quarkus技能,展示现代、快速的CLI能做什么!
“在CLI应用程序的世界中,Quarkus是‘它运行了吗?’和‘等等,已经完成了?’之间的区别。”
现在去构建启动速度比同事打开IDE还快的CLI应用程序吧。记住,能力越大,责任越大……要在每个机会展示你的Quarkus技能。
思考的食粮
在你急于用Quarkus重写所有CLI工具之前(我们知道你想这样做),考虑一下:超快、低占用的CLI工具的兴起可能会如何改变我们与复杂系统的交互方式?Quarkus是否是让强大的管理工具更广泛可用的关键?在你的本地镜像编译时思考一下这个问题。
编码愉快,愿你的CLI应用程序始终快速且内存高效!