Gradle 实战 - 命令行传递-ApiHug准备-工具篇-013

  🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓

  1. GitHub - apihug/apihug.com: All abou the Apihug   
  2. apihug.com: 有爱,有温度,有质量,有信任
  3. ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace

ApiHug 整个工具链基于 Gradle, 使用 ApiHug 准备工作最先需要学习的就是 gradle. 工欲善其事,必先利其器

命令行参数是动态控制查询运行时 profile 主要方式之一, 同理 gradle 也提供了参数传入机制。

#参数类型

两种类型的参数:

  1. 系统配置参数 -D 标志
  2. 项目配置参数 -P 标志

添加参数打印:

apply plugin: "java"
description = "Gradle Command Line Arguments examples"task propertyTypes(){doLast{if (project.hasProperty("args")) {println "Our input argument with project property ["+project.getProperty("args")+"]"}println "Our input argument with system property ["+System.getProperty("args")+"]"}
}

运行操作如下:

> .\gradlew.bat  cmd-line-args:propertyTypes -Dargs=dear -Pargs=xue   > Task :cmd-line-args:propertyTypes
Our input argument with project property [xue]
Our input argument with system property [dear]

#命令行参数传递

上面有读取参数的方式, 那么如何参数传递到我们的 main 函数?

apply plugin: "java"
apply plugin: "application"
description = "Gradle Command Line Arguments examples"ext.javaMainClass = "com.dearxue.cmd.MainClass"application {mainClassName = javaMainClass
}

java 方法如下:


public class MainClass {public static void main(String[] args) {System.out.println("JAVA - Gradle command line arguments example");for (String arg : args) {System.out.println("JAVA - Got argument [" + arg + "]");}}
}

运行如下:

> .\gradlew.bat  cmd-line-args:run --args="may the force be with you"> Task :cmd-line-args:run
JAVA - Gradle command line arguments example
JAVA -  Got argument [may]
JAVA -  Got argument [the]
JAVA -  Got argument [force]
JAVA -  Got argument [be]
JAVA -  Got argument [with]
JAVA -  Got argument [you]

Application 的 run 任务自动你参数处理了, JavaExec 就不一样, 需要写操作如下:

if (project.hasProperty("args")) {ext.cmdargs = project.getProperty("args")
} else {ext.cmdargs = "ls"
}task cmdLineJavaExec(type: JavaExec) {group = "Execution"description = "Run the main class with JavaExecTask"classpath = sourceSets.main.runtimeClasspathmainClass = javaMainClassargs cmdargs.split()
}

输出结果同样:

> .\gradlew.bat  cmd-line-args:cmdLineJavaExec  -Pargs="may the force be with you"> Task :cmd-line-args:cmdLineJavaExec
JAVA - Gradle command line arguments example
JAVA -  Got argument [may]
JAVA -  Got argument [the]
JAVA -  Got argument [force]
JAVA -  Got argument [be]
JAVA -  Got argument [with]
JAVA -  Got argument [you]

#Exec 传递参数到第三方应用

task cmdLineExec(type: Exec) {group = "Execution"description = "Run an external program with ExecTask"commandLine cmdargs.split()
}

执行:

$ ./gradlew cmdLineExec -Pargs="ls -ll"> Task :cmd-line-args:cmdLineExec
total 4
drwxr-xr-x 1 user 1049089    0 Sep  1 17:59 bin
drwxr-xr-x 1 user 1049089    0 Sep  1 18:30 build
-rw-r--r-- 1 user 1049089 1016 Sep  3 15:32 build.gradle
drwxr-xr-x 1 user 1049089    0 Sep  1 17:52 src

#结论

这个例子演示如何通过 gradle 传递 参数。

有多种方式来传递参数, 通过系统参数, 或者项目参数, 通过项目参数是个更推荐的方式。

然后 如何传递 command-line 给 Java 或者 其他第三方应用。

项目地址: cmd-line-args 项目例子

我们

api-hug-contact

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/617159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让人迷糊的ThreadLocalMap,看清他的本质

ThreadLocalMap ThreadLocalMap是ThreadLocal的内部类,主要提供了数据存储和获取的API和存储真实数据的数据结构 我们怎么才能更好的理解这个数据机构呢,首先给出答案:其实我们被他的名字弄迷糊了,他存数据的结构其实本质上是一…

生产事故:线程管理不善诱发P0故障

背景 处于业务诉求,需要建立一个统一的调度平台,最终是基于 Dolphinscheduler 的 V1.3.6 版本去做二次开发。在平台调研建立时,这个版本是最新的版本 命运之轮开始转动 事故 表象 上班后业务部门反馈工作流阻塞,登录系统发现大…

java栈和队列

目录 1.栈的概念: 2.栈的一些常用的方法: ​编辑 3.栈的模拟实现: 栈的应用: 4.关于栈的练习 5.队列的概念: 6.队列的使用: 7.模拟队列 8.循环队列 9.双端队列: 10.面试题 1.栈的概念&…

【汇编】存储器

存储器 计算机存储器可分为内部存储器(又称内存或主存)和外部存储器,其中内存是CPU能直接寻址的储存空间,由半导体器件制成 存储单元的地址和内容 计算机存储信息的基本单位是一个二进制位,一位可存储一个二进制数&…

【鸿蒙开发】第二十一章 Media媒体服务(一)

1 简介 Media Kit(媒体服务)提供了AVPlayer和AVRecorder用于播放、录制音视频。 在Media Kit的开发指导中,将介绍各种涉及音频、视频播放或录制功能场景的开发方式,指导开发者如何使用系统提供的音视频API实现对应功能。比如使用…

funasr 麦克风实时流语音识别

参考: https://github.com/alibaba-damo-academy/FunASR chunk_size 是用于流式传输延迟的配置。[0,10,5] 表示实时显示的粒度为 1060=600 毫秒,并且预测的向前信息为 560=300 毫秒。每个推理输入为 600 毫秒(采样点为 16000*0.6=960),输出为相应的文本。对于最后一个语音…

C# dynamic 数据类型

在C#中,dynamic是一种数据类型,它允许在运行时推迟类型检查和绑定。使用dynamic类型,可以编写更具灵活性的代码,因为它允许在编译时不指定变量的类型,而是在运行时根据实际情况进行解析。 dynamic类型的变量可以存储任…

老板最怕你出这样的代码。。。

大家好, 这一个月时间,阿里巴巴、滴滴、腾讯都发生过应用线上故障的事情,很多同学说是降本增“笑”的后果然后圈内流传一个新想法,为了避免“开源节流” 的事情,工作中要写一些防御性的代码。 什么意思?就…

大模型(Large Models):探索人工智能领域的新边界

🌟文章目录 🌟大模型的定义与特点🌟模型架构🌟大模型的训练策略🌟大模型的优化方法🌟大模型的应用案例 随着人工智能技术的飞速发展,大模型(Large Models)成为了引领深度…

python基础——类【类的定义和使用、魔术方法】

📝前言: python中的类,自我感觉在某种程度上和C语言的结构体是有共同之处的,如果有兴趣,可以先看看这篇文章:C语言——结构体类型(一),先了解一下C语言中的结构体&#x…

SpringBoot之集成Redis

SpringBoot之集成Redis 一、Redis集成简介二、集成步骤2.1 添加依赖2.2 添加配置2.3 项目中使用 三、工具类封装四、序列化 (正常都需要自定义序列化)五、分布式锁(一)RedisTemplate 去实现场景一:单体应用场景二&…

第二期书生浦语大模型训练营第三次笔记

RAG RAG是什么? RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺…