Gradle 实战 - 启动main函数-ApiHug准备-工具篇-012

  🤗 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. 工欲善其事,必先利其器

在 gradle 直接运行 java main 函数, 犹如我们直接运行 gradle bootRun, 整个教程简单看下 gradle 如何直接运行 main 函数。

gradle 有很多种方式运行, 下面我们具体一一分析。

#项目结构

public class MainClass {

  public static void main(String[] args) {
    System.out.println("Goodbye cruel world ...");
  }
}

#Application 插件

Application 插件是 gradle 核心插件之一, 也是我们熟悉的 java 插件隐式引入的插件。

  1. The Application Pluginopen in new window
  2. Building Java Applications Sampleopen in new window

配置如下:


apply plugin: "application"

description = "Java MainClass execution examples"

ext {
    javaMainClass = "com.dearxue.gradle.exec.MainClass"
}

application {
    mainClassName = javaMainClass
}

application 插件自动引入了 run 任务:

Application tasks
-----------------
run - Runs this project as a JVM application

运行结果:


.\gradlew.bat  java-exec:run 

> Task :java-exec:run
Goodbye cruel world ...

#JavaExec

JavaExec 文档open in new window, JavaExec 来启动java 程序。

  1. main 类
  2. class path

task runWithJavaExec(type: JavaExec) {
    group = "Execution"
    description = "Run the main class with JavaExecTask"
    classpath = sourceSets.main.runtimeClasspath
    mainClass = javaMainClass
}

运行结果:

 .\gradlew.bat  java-exec:runWithJavaExec

> Task :java-exec:runWithJavaExec
Goodbye cruel world ...

#Exec

Exec 文档open in new window, Exec 可以执行任何命令行:

task stopTomcat(type:Exec) {
  workingDir '../tomcat/bin'

  //on windows:
  commandLine 'cmd', '/c', 'stop.bat'

  //on linux
  commandLine './stop.sh'

  //store the output instead of printing to the console:
  standardOutput = new ByteArrayOutputStream()

  //extension method stopTomcat.output() can be used to obtain the output:
  ext.output = {
    return standardOutput.toString()
  }
}

我们的例子:

  1. 依赖 build 任务
  2. 运行时 class path 依赖
  3. main 函数

task runWithExec(type: Exec) {
    dependsOn build
    group = "Execution"
    description = "Run the main class with ExecTask"
    commandLine "java", "-classpath", sourceSets.main.runtimeClasspath.getAsPath(), javaMainClass
}

效果一样:

 .\gradlew.bat  java-exec:runWithExec    

> Task :java-exec:runWithExec
Goodbye cruel world ...

#Exec 输出 jar 包

task runWithExecJarOnClassPath(type: Exec) {
    dependsOn jar
    group = "Execution"
    description = "Run the mainClass from the output jar in classpath with ExecTask"
    commandLine "java", "-classpath", jar.archiveFile.get(), javaMainClass
}

效果一样:

.\gradlew.bat  java-exec:runWithExecJarOnClassPath

> Task :java-exec:runWithExecJarOnClassPath
Goodbye cruel world ...

#Exec 独立打包

jar {
    manifest {
        attributes(
            "Main-Class": javaMainClass
        )
    }
}

task runWithExecJarExecutable(type: Exec) {
    dependsOn jar
    group = "Execution"
    description = "Run the output executable jar with ExecTask"
    commandLine "java", "-jar", jar.archiveFile.get()
}

运行结果:

.\gradlew.bat  java-exec:runWithExecJarExecutable 

> Task :java-exec:runWithExecJarExecutable
Goodbye cruel world ...

#结论

Application 插件提供了最小配置; JavaExec 任务让我们保持最少依赖。

最后的 Exec 任务可以让我们灵活的组合应用,异常的强大方便。

项目地址 java-exec 例子

api-hug-contact

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ底层原理及性能调优实战(二)

目录 1、RocketMQ源码分析 1-1、读源码前的思考 1-2、RocketMQ整体架构及连通性 1-3、RocketMQ核心组件及整体流程 1-4、NameServer源码分析 1-4-1、RocketMQ核心组件及整体流程 1-4-2、NameServer启动流程概要 1-4-3、Broker启动流程概要 1-4-4、Topic路由注册、剔除…

SpringBoot3整合Mybatis plus

Java版本:17 Spring Boot版本:3.1.10 Mybatis plus版本:3.5.5 源码地址:Gitee仓库 01 创建我们的项目工程 首先,我们创建一个maven工程spring-boot3-demo,pom文件配置如下。 这里我们将spring-boot-start…

AUTOSAR-COMStack-002_Update-Bit 机制

最近在工作中第一次使用了AUTOSAR COM Update-Bit功能,对使用了Update-Bit功能信号的使用,不能得心应手,发送信号比较顺利;测试接收信号功能时,对应的RTE接口始终不能接收到对应的模拟发送的信号值,后来翻阅…

004Node.js常用快捷键

1.常用的终端命令: (1)del 文件名: 删除文件 (2)ipconfig: 查看IP命令 (3)mkdir 目录名 :在当前目录新建指定目录 (4)rd 目录名:在当前…

Leetcode算法训练日记 | day25

一、组合总和Ⅲ 1.题目 Leetcode:第 216 题 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺…

标准孔板简单适应性强

即使生活一地鸡毛,但仍然要觉得未来可期,做自己而不是解释自己,只要能变好,慢点又如何,愿我们都是苦尽甘来的人,熬得住就出众,熬不住就出局,鹤壁永成矿山,在行业坚持十余…

tested4142

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

Stacked Hourglass Networks for Human Pose Estimation 用于人体姿态估计的堆叠沙漏网络

Stacked Hourglass Networks for Human Pose Estimation 用于人体姿态估计的堆叠沙漏网络 这是一篇关于人体姿态估计的研究论文,标题为“Stacked Hourglass Networks for Human Pose Estimation”,作者是 Alejandro Newell, Kaiyu Yang, 和 Jia Deng&a…

mysql题目4

tj11: select count(*) 员工总人数 from tb_dept a join tb_employee b on a.deptnob.deptno where a.dname 市场部

Github 2024-04-14 php开源项目日报Top9

根据Github Trendings的统计,今日(2024-04-14统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目9TypeScript项目1Laravel: 以优雅语法简化Web开发 创建周期:4028 天开发语言:PHP协议类型:MIT LicenseStar数量:30824 个Fork数量:1…

[大模型] BlueLM-7B-Chat WebDemo 部署

BlueLM-7B-Chat WebDemo 部署 模型介绍 BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,参数规模为 70 亿。BlueLM-7B 在 C-Eval 和 CMMLU 上均取得领先结果,对比同尺寸开源模型中具有较强的竞争力(截止11月1号)。本次发布共包含 7…

ASP.NET MVC使用Layui选择多图片上传

前言: 多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解。对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的upload.render方法已经帮我们封装好了&#x…

微信跳转页面时发生报错

报错如下图所示: 解决方法:(从下面四种跳转方式中任选一种,哪种能实现效果就用哪个) 带历史回退 wx.navigateTo() //不能跳转到tabbar页面 不带历史回退 wx.redirectTo() //跳转到另一个页面wx.switchTab() //只能…

Nature Machine Intelligence 纽约大学团队提出基于深度学习和语音生成技术的脑电-语音解码

由于神经系统的缺陷导致的失语会导致严重的生活障碍,它可能会限制人们的职业和社交生活。近年来,深度学习和脑机接口(BCI)技术的飞速发展为开发能够帮助失语者沟通的神经语音假肢提供了可行性。开发神经-语音解码器的尝试大多数依…

【树莓派初始化】教你从0开始搭建树莓派的使用环境

文章目录 前言1.什么是树莓派?1.1什么用户适合购买树莓派学习编程? 2.如何初始化一个树莓派2.1 烧录系统2.2 测试开机2.3 设置树莓派显示输出的分辨率2.4 网络链接2.5 Putty链接树莓派2.6 VNC链接树莓派2.7 使用filezilla软件传输文件到树莓派 3.使用Xsh…

相关性气泡图-数据模拟到作图(自备)

目录 普通气泡图ggplot2 相关性气泡图 数据处理1:生成两个dataframe 数据处理2:计算相关性R和P 数据处理3:添加细节 绘图 核心:气泡的信息主要体现在气泡大小和气泡颜色变化。 普通气泡图ggplot2 rm(list ls()) librar…

【Golang学习笔记】从零开始搭建一个Web框架(三)

文章目录 分组控制分组嵌套中间件 前情提示: 【Golang学习笔记】从零开始搭建一个Web框架(一)-CSDN博客 【Golang学习笔记】从零开始搭建一个Web框架(二)-CSDN博客 分组控制 分组控制(Group Control)是 Web 框架应提供…

Linux系统——Zookeeper集群

目录 一、Zookeeper概述 1.Zookeeper简介 2.Zookeeper工作机制 3.Zookeeper数据结构 4.Zookeeper应用场景 4.1统一命名服务 4.2统一配置管理 4.3统一集群管理 4.4服务器动态上下线 4.5软负载均衡 5.Zookeeper选举机制 5.1第一次启动选举机制 5.2非第一次启动选举机…

006Node.js cnpm的安装

百度搜索 cnpm,进入npmmirror 镜像站https://npmmirror.com/ cmd窗口输入 npm install -g cnpm --registryhttps://registry.npmmirror.com

ESP32系统监测(基于ESP-IDF)

主要参考资料: CSDN文章《ESP32 IDF开发调试奇技淫巧》: https://blog.csdn.net/qq_43332314/article/details/131859971 目录 查询系统剩余堆/最小堆大小查询线程剩余栈大小方法一方法二 查询CPU占用率 查询系统剩余堆/最小堆大小 查询系统剩余堆、最小堆大小的 A…