Gradle –多个启动脚本示例

2023-11-20

很少有build.gradle示例向您展示如何创建多个启动脚本或可执行Java应用程序。

1.单启动脚本

1.1在Gradle中,您可以使用应用程序插件来创建可执行的Java应用程序:

build.gradle
apply plugin: 'application'

mainClassName = "com.mkyong.analyzer.run.threads.MainRunApp"

applicationName = 'mainApp'

applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1024m"]

1.2使用gradle distZip命令创建可执行Java应用程序。

$ gradle :analyzer:distZip

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:startScripts
:distZip

1.3将在$project/build/distributions/xxx.zip创建一个zip文件。

$project/build/distributions/project.zip
--- mainApp     #*nix	  -> com.mkyong.analyzer.run.threads.MainRunApp
--- mainApp.bat #windows	-> com.mkyong.analyzer.run.threads.MainRunApp

PS或者,尝试gradle distTar创建一个Tar文件。

2.多个启动脚本

2.1要创建多个启动脚本,请创建一个自定义的CreateStartScripts类型:

build.gradle
apply plugin: 'application'

mainClassName = "com.mkyong.analyzer.run.threads.MainRunApp"

applicationName = 'mainApp'

applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1024m"]

task createExtraRunApp(type: CreateStartScripts) {
    mainClassName = "com.mkyong.analyzer.run.UpdateHostingExtraRunApp"
    classpath = startScripts.classpath
    outputDir = startScripts.outputDir
    applicationName = 'hostingExtraApp'
    defaultJvmOpts = ["-Xms1024m", "-Xmx2048m"]
}

applicationDistribution.into("bin") {
    duplicatesStrategy= DuplicatesStrategy.EXCLUDE
    from(createExtraRunApp)
    fileMode = 0755
}

2.2该脚本将创建两个可执行的Java应用程序:

$project/build/distributions/project.zip
---mainApp    			-> com.mkyong.analyzer.run.threads.MainRunApp	 
---mainApp.bat			-> com.mkyong.analyzer.run.threads.MainRunApp
---hostingExtraApp		-> com.mkyong.analyzer.run.UpdateHostingExtraRunApp
---hostingExtraApp.bat	-> com.mkyong.analyzer.run.UpdateHostingExtraRunApp

3.多个启动脚本–再次

3.1这个build.gradle在我的项目中使用,它创建了三个可执行的Java应用程序:

build.gradle
apply plugin: 'application'
mainClassName = "com.hostingcompass.analyzer.run.threads.HydraRunApp"
applicationName = 'hydra'

applicationDefaultJvmArgs = ["-Dlogback.configurationFile=MY_APP_HOME/logback-hydra.xml",
                             "-Dconfig=MY_APP_HOME/config.properties", 
							"-Djava.net.preferIPv4Stack=true", "-Dapp.home=MY_APP_HOME/", "-Xms512m", "-Xmx1024m"]

startScripts {
    doLast {
        unixScript.text = unixScript.text.replace('MY_APP_HOME', '\$APP_HOME')
        windowsScript.text = windowsScript.text.replace('MY_APP_HOME', '%~dp0..')
    }
}

task updateHostingExtraRunApp(type: CreateStartScripts) {
    mainClassName = "com.hostingcompass.analyzer.run.UpdateHostingExtraRunApp"
    classpath = startScripts.classpath
    outputDir = startScripts.outputDir
    applicationName = 'hostingExtra'
    defaultJvmOpts = ["-Dlogback.configurationFile=MY_APP_HOME/logback-hosting-extra.xml",
                      "-Dconfig=MY_APP_HOME/config.properties", "-Dapp.home=MY_APP_HOME/", "-Xms512m", "-Xmx1024m"]

    updateHostingExtraRunApp {
        doLast {
            unixScript.text = unixScript.text.replace('MY_APP_HOME', '\$APP_HOME')
            windowsScript.text = windowsScript.text.replace('MY_APP_HOME', '%~dp0..')
        }
    }
}

task updateWhoisExtraRunApp(type: CreateStartScripts) {
    mainClassName = "com.hostingcompass.analyzer.run.UpdateWhoisExtraRunApp"
    classpath = startScripts.classpath
    outputDir = startScripts.outputDir
    applicationName = 'whoisExtra'
    defaultJvmOpts = ["-Dlogback.configurationFile=MY_APP_HOME/logback-whois-extra.xml",
                      "-Dconfig=MY_APP_HOME/config.properties", "-Dapp.home=MY_APP_HOME/", "-Xms512m", "-Xmx1024m"]

    updateWhoisExtraRunApp {
        doLast {
            unixScript.text = unixScript.text.replace('MY_APP_HOME', '\$APP_HOME')
            windowsScript.text = windowsScript.text.replace('MY_APP_HOME', '%~dp0..')
        }
    }
}

applicationDistribution.into("bin") {
    duplicatesStrategy= DuplicatesStrategy.EXCLUDE
    from(updateHostingExtraRunApp)
    from(updateWhoisExtraRunApp)
    fileMode = 0755
}

distZip {
    archiveName 'analyzer.zip'
}

3.2输出

$project/build/distributions/analyzer.zip
---hydra
---hydra.bat 
---hostingExtra
---hostingExtra.bat
---whoisExtra
---whoisExtra.bat

注意
记住要声明排除duplicatesStrategy以避免重复的启动脚本。

applicationDistribution.into("bin") {
    duplicatesStrategy= DuplicatesStrategy.EXCLUDE
    from(updateHostingExtraRunApp)
    from(updateWhoisExtraRunApp)
    fileMode = 0755
}

参考文献

  1. Gradle –应用程序插件
  2. Gradle应用程序插件– APP_HOME

翻译自: https://mkyong.com/gradle/gradle-multiple-start-script-examples/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle –多个启动脚本示例 的相关文章

随机推荐

  • c语言图案代码简单,求个用最简单的的代码来实现图形界面…

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 include Declare Windows procedure LRESULT CALLBACK WindowProcedure HWND UINT WPARAM LPARAM Make t
  • 大雨

    大雨生彷徨 以为天人兮溯鎏妆 轰鸣兮悠远 望长水东来去也 长生共兴
  • ImportError: C extension: No module named 'pandas._libs.tslibs.timestamps' not built.解决方法

    想用一下pandas遇到了这个情况 错误的意思是没有名叫 pandas libs tslibs timestamps 的模块 网上说要这样做 进入pyinstaller包的安装目录 在python安装目录的Lib site packages
  • ubuntu 18.04.5中flow, smarts & xingtian 多智能体RL环境构建

    ubuntu 18 04 5中flow smarts xingtian 多智能体RL环境构建 Flow 虚拟环境构建 由于需要在同一个主机上运行多个环境 不同的环境具有不同的依赖包 因此每个智能体环境单独构建一个虚拟python环境 首先安
  • AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

    写在前面 先推荐一下另一篇关于使用AutoDL的教程 AutoDL使用教程 1 创建实例 2 配置环境 上传数据 3 PyCharm2021 3专业版下载安装与远程连接完整步骤 注意 在AutoDL的终端键入命令运行时 通常是一定要先cd进
  • 华为OD机试 - 密室逃生游戏(Java)

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定 密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为 1 N 每个箱子中都有一个 字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字
  • 随手学习笔记

    1 正点原子zynq视频教程 真人版 P128 P132讲解ADDA 第30 1讲高速ADDA实验 ADC芯片简介 哔哩哔哩 bilibili 2 正点原子zynq视频教程 真人版 关于zynq FPGA讲解非常详细 可逐个详细学习 第1讲
  • 使用QZXing生成并解析二维码

    QZxing 是对 zxing 的一个封装 用于在 Qt 程序中加入条形码和二维码识别的功能 这里就讲讲如何编译和使用这个库 前几年 QZXing 的代码是放到 sourceforge net 上的 现在迁移到了 github com 所以
  • sql手工注入

    information schema 系统数据库 包含所有数据库相关信息 information schema schemata中schema name列 字段为所有数据库名称 information schema tables中table
  • 中山大学App校园地图功能分析

    中山大学App校园地图简单功能分析介绍 用户入口 进入中山大学App首页 即可看到校园地图 点击后进入校园地图主界面 校区选取 进入地图主界面后 即可呈现出校园地图 顶上正中间是选取校区的功能按钮 单击后出现全部4个校区可供选择 路线导航
  • 如何在手机上打开xmind文件_如何高效率整理电脑上的文件 ?

    个人电脑 01 没有时间整理 也不想整理 怎么办 1 1 只整理电脑桌面 电脑桌面放着各种文件 已经成为多数人的习惯 一打开电脑 就可以从电脑桌面上看见自己有哪些文件等着处理 当天处理的文件存放在桌面 第二天要用的时候 直接在桌面打开就可以
  • python遍历文件夹中的图片

    import cv2 import os mainFolder Images RectSmall myFolders os listdir mainFolder print myFolders for folder in myFolders
  • jre jdk更改目录后Java无法运行问题解决方案

    问题 在将Java文件 包含jdk jre 由C盘直接剪贴到D盘后 所有Java程序无法运行 且其Java图标不再显示 解决方案 首先更改环境变量 当我们单纯地将Java文件更改位置后 我们计算机的环境变量仍未改变 依旧是当时安装Java时
  • Verilog中if- else if语句和case语句用法:

    一 if语句 1 两种情况 if 条件语句 begin end else begin end 2 多种情况 if 条件语句 begin end else if 条件语句 begin end else if 条件语句 begin end el
  • 编程大师-Netty

    45 张图深度解析 Netty 架构与原理 里奥ii的博客 CSDN博客 netty全过程图解 最详细清晰版 netty流程 PANDA的博客 CSDN博客
  • Kafka学习(三)简单实例(可以简单做测试)

    java客户端连接kafka简单测试 本案例kafka版本是kafka 2 11 0 9 0 1 用java来实现kafka生产者 消费者的示例 在测试的过程中遇到的特别的问题以及解决办法 其他小问题就不一一列举了 1 使用kafka cl
  • libero-soc许可证申请和环境配置

    环境 64位机 在哪台电脑上安装libero soc 就用哪台电脑申请许可证 1 注册 https www microsemi co 在官网注册 之后申请的许可证会发到注册时填写的邮箱 2 申请许可证 https www microsemi
  • 操作系统 段页式存储管理

    一 引入 分页系统是以页面作为内存分配的基本单位 能有效地提高内存利用率 但信息共享等不方便 分段系统是以段作为内存分配的基本单位 它能够更好地满足用户多方面的需要 信息共享 动态链接等 但采用分区方式管理物理内存 仍然存在碎片问题 段页式
  • mysql varchar类型条件查询不加引号

    一张160w数据量的表 select from order promotion where order no 15441913435665186 select from order promotion where order no 1544
  • Gradle –多个启动脚本示例

    很少有build gradle示例向您展示如何创建多个启动脚本或可执行Java应用程序 1 单启动脚本 1 1在Gradle中 您可以使用应用程序插件来创建可执行的Java应用程序 build gradle apply plugin app