gradle的二进制版本_Gradle入门:创建二进制分发

gradle的二进制版本

创建有用的应用程序后,很可能我们想与其他人共享它。 一种方法是创建一个可以从我们的网站下载的二进制发行版。

这篇博客文章描述了如何满足以下要求的二进制发行版:

  • 我们的二进制分发不得使用所谓的“胖子”方法。 换句话说,我们的应用程序的依赖项不得与我们的应用程序打包到同一jar文件中。
  • 我们的二进制发行版必须包含* nix和Windows操作系统的启动脚本。
  • 我们的二进制发行版的根目录必须包含我们的应用程序的许可证。

让我们开始吧。

补充阅读:

  • Gradle入门:简介可帮助您安装Gradle,描述Gradle构建的基本概念,并描述如何使用Gradle插件为构建提供功能。
  • Gradle入门:我们的第一个Java项目描述了如何使用Gradle创建Java项目并将应用程序打包到可执行jar文件中。
  • Gradle入门:依赖性管理介绍了如何管理Gradle项目的依赖性。

创建一个二进制分布

该应用程序插件是Gradle插件,它使我们能够运行我们的应用程序,进行安装,并创建不使用“胖子”方法的二进制发行版。

我们可以通过对在Gradle入门教程的上一部分中创建的示例应用程序的build.gradle文件进行以下更改来创建二进制分发:

  1. 删除jar任务的配置。
  2. 将应用程序插件应用于我们的项目。
  3. 通过设置mainClassName属性的值来配置应用程序的主类。

在对build.gradle文件进行了这些更改之后,其外观如下(突出显示了相关部分):

apply plugin: 'application'
apply plugin: 'java'repositories {mavenCentral()
}dependencies {compile 'log4j:log4j:1.2.17'testCompile 'junit:junit:4.11'
}mainClassName = 'net.petrikainulainen.gradle.HelloWorld'

该应用程序插件将五个任务添加到我们的项目中:

  • 运行任务将启动应用程序。
  • startScripts任务将启动脚本创建到build / scripts目录。 该任务为Windows和* nix操作系统创建启动脚本。
  • installApp任务将应用程序安装到build / install / [项目名称]目录中。
  • distZip任务创建二进制发行版,并将其打包为可从build / distributions目录中找到的zip文件。
  • distTar任务创建二进制发行版,并将其打包到可从build / distributions目录中找到的tar文件中。

我们可以通过在项目的根目录中运行以下命令之一来创建二进制分发: gradle distZipgradle distTar 。 如果我们创建打包为zip文件的二进制分发,请参见以下输出:

> gradle distZip
:compileJava
:processResources
:classes
:jar
:startScripts
:distZipBUILD SUCCESSFULTotal time: 4.679 secs

如果解压缩由应用程序插件创建的已创建二进制发行版,则将获得以下目录结构:

  • bin目录包含启动脚本。
  • lib目录包含我们应用程序的jar文件及其依赖项。

您可以通过阅读第45章“ Gradle用户指南”中的“应用程序插件”来获取有关应用程序插件的更多信息。

现在,我们可以创建一个满足几乎所有需求的二进制发行版。 但是,我们仍然需要将应用程序的许可证添加到二进制分发的根目录中。 让我们继续前进,找出我们如何做到这一点。

将我们的应用程序的许可证文件添加到二进制分发中

通过执行以下步骤,我们可以将应用程序的许可证添加到二进制分发中:

  1. 创建一个任务,将许可证文件从我们项目的根目录复制到构建目录。
  2. 将许可证文件添加到创建的二进制分发的根目录中。

让我们继续仔细研究这些步骤。

将许可证文件复制到构建目录

包含我们的应用程序许可证的文件的名称为LICENSE ,可以从我们项目的根目录中找到。

我们可以按照以下步骤将许可证文件复制到构建目录:

  1. 创建一个新的Copy任务,称为copyLicense
  2. 使用CopySpec接口的from()方法配置源文件。 将字符串“ LICENSE”作为方法参数传递。
  3. 使用CopySpec接口的into()方法配置目标目录。 将$ buildDir属性的值作为方法参数传递。

完成这些步骤后, build.gradle文件如下所示(相关部分突出显示):

apply plugin: 'application'
apply plugin: 'java'repositories {mavenCentral()
}dependencies {compile 'log4j:log4j:1.2.17'testCompile 'junit:junit:4.11'
}mainClassName = 'net.petrikainulainen.gradle.HelloWorld'task copyLicense(type: Copy) {from "LICENSE"into "$buildDir"
}

附加信息:

  • 复制任务的API文档
  • 《 Gradle用户指南》的16.6节复制文件

现在,我们已经创建了一个任务,该任务将LICENSE文件从项目的根目录复制到构建目录。 但是,当我们在项目的根目录中运行gradle distZip命令时,将看到以下输出:

> gradle distZip
:compileJava
:processResources
:classes
:jar
:startScripts
:distZipBUILD SUCCESSFULTotal time: 4.679 secs

换句话说,我们的新任务不会被调用,这自然意味着许可证文件不包含在我们的二进制发行版中。 让我们解决这个问题。

将许可证文件添加到二进制分发版

我们可以按照以下步骤将许可证文件添加到创建的二进制分发中:

  1. 通过从声明中删除字符串“(类型:复制)”,将copyLicense任务从“ 复制”任务转换为“常规” Gradle任务。
  2. 通过执行以下步骤,修改copyLicense任务的实现:
    1. 配置copyLicense任务的输出。 创建一个新的File对象,该对象指向从构建目录中找到的许可证文件,并将其设置为outputs.file属性的值。
    2. 将许可证文件从项目的根目录复制到构建目录。
  3. 应用程序插件为我们的项目设置了一个名为applicationDistributionCopySpec属性。 我们可以使用它来将许可证文件包括到创建的二进制发行版中。 我们可以按照以下步骤进行操作:
    1. 使用CopySpec接口的from()方法配置许可证文件的位置,并将copyLicense任务的输出作为方法参数传递。
    2. 使用CopySpec接口的into()方法配置目标目录,并传递一个空String作为方法参数。

完成这些步骤后, build.gradle文件如下所示(相关部分突出显示):

apply plugin: 'application'
apply plugin: 'java'repositories {mavenCentral()
}dependencies {compile 'log4j:log4j:1.2.17'testCompile 'junit:junit:4.11'
}mainClassName = 'net.petrikainulainen.gradle.HelloWorld'task copyLicense {outputs.file new File("$buildDir/LICENSE")doLast {copy {from "LICENSE"into "$buildDir"}}
}applicationDistribution.from(copyLicense) {into ""
}

补充阅读:

  • TaskdoLast()操作的API文档
  • 第45.5节在分发的Gradle用户指南中包括其他资源
  • ApplicationPluginConvention类的Groovydoc

当在项目的根目录中运行命令gradle distZip时 ,将看到以下输出:

> gradle distZip
:copyLicense
:compileJava
:processResources
:classes
:jar
:startScripts
:distZipBUILD SUCCESSFULTotal time: 5.594 secs

如我们所见,现在将调用copyLicense任务,并且如果解包二进制分发包,则会注意到LICENSE文件是从其根目录中找到的。

让我们继续总结一下我们从此博客文章中学到的知识。

摘要

这篇博客文章教会了我们三件事:

  • 我们了解到可以使用应用程序插件创建二进制发行版。
  • 我们学习了如何使用复制任务将文件从源目录复制到目标目录。
  • 我们了解了如何将文件添加到由应用程序插件创建的二进制分发中。

如果您想玩这个博客文章的示例应用程序, 可以从Github获得 。

翻译自: https://www.javacodegeeks.com/2014/09/getting-started-with-gradle-creating-a-binary-distribution.html

gradle的二进制版本

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

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

相关文章

php auth和rbac区别,php中比rbac更好的权限认证的方式auth类认证

RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了,比如页面上面的操作按钮, 我想判断用户权限来显示这个按钮, 如果没有权限就不会显示这个按钮; 再比如我想按积分进行权限认证, 积分在0-10…

使用比较器的nulls对具有null值的列表进行排序

你好朋友, 在本教程中,我们将看到如何使用Java 8 Comparator.nullsFirst在列表中的项目很少为空时如何对项目列表进行排序,以便将null视为列表中的最小元素。 –什么是比较器 – nullsFirst方法在Comparator中做什么 –排序具有非空名称的…

php 获取文件给用户下载,php 下载文件/直接下载数据内容

思路步骤* 定义参数* 魔术方法* 执行下载* 获取设置属性函数* 获取设置文件mime 类型* 获取设置下载文件名* 设置header* 下载函数实现代码class DownFile{// 定义参数public $data; // 下载的数据或文件名public $is_confalse; // 是否是下载内容public $down_file_name; // 下…

Jar Hell变得轻松–用jHades揭开类路径的神秘面纱

Java开发人员将不得不面对的最困难的问题是类路径错误: ClassNotFoundException , NoClassDefFoundError ,Jar Hell, Xerces Hell和公司。 在本文中,我们将探究这些问题的根本原因,并了解最小的工具&#…

韩顺平php教程笔记,PHP笔记,韩顺平php笔记_PHP教程

PHP笔记,韩顺平php笔记Mysql-----------------------------------------------------------------------------Mysql 改默认密码update mysql.user set PasswordPASSWORD(123456) WHERE UserrootFLUSH PRIVILEGES去了解下MYSQL的范式、反范式、混合范式还有索引的建…

php键盘输入函数,php的常用输入语句以及常用函数

这篇文章主要介绍了关于php的常用输入语句以及常用函数&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下一、 echo语句echo做php的人在熟悉不过了&#xff0c;在php文件中我们用他来输出数据。<?php echo "hi mm"…

分度器中硒定位器的完整指南(示例)

在测试网站的功能时&#xff0c;特别是Web元素&#xff08;例如单选按钮&#xff0c;文本框&#xff0c;下拉列表等&#xff09;&#xff0c;您需要确保能够访问这些元素。 Selenium定位器正是出于这个目的&#xff0c;通过使用此命令&#xff0c;我们可以识别这些Web元素DOM&a…

ajax php 投票,PHP 实例 AJAX 投票

PHP 实例 - AJAX 投票AJAX 投票在下面的实例中&#xff0c;我们将演示一个投票程序&#xff0c;通过它&#xff0c;投票结果在网页不进行刷新的情况下被显示。你喜欢 PHP 和 AJAX 吗?是:否:实例解释 - HTML 页面当用户选择上面的某个选项时&#xff0c;会执行名为 "getVo…

wildfly管理控制台_WildFly 9 –别希望您的控制台像这样!

wildfly管理控制台每个人都可能听到这个消息。 周一发布了第一个WildFly 9.0.0.Alpha1版本。 您可以从wildfly.org网站上下载它&#xff0c;最大的变化是它是由一个新的功能配置工具构建的&#xff0c;该工具位于现在单独的核心发行版上&#xff0c;还包含一个新的Servlet发行版…

azure mysql sql,UiPath连接Azure Sql Server数据库

一、创建数据库在Azure中创建SQL数据库image更改防火墙设置&#xff0c;并设置客户端IP访问规则image二、安装数据源驱动在本地安装数据源驱动程序&#xff0c;保证可以正常接入到远程的数据库。如果不安装驱动程序&#xff0c;则会出现以下报错&#xff1a;[Microsoft][ODBC D…

Spring Boot删除嵌入式Tomcat服务器,启用Jetty服务器

快速指南&#xff0c;在Spring Boot应用程序中排除嵌入式tomcat服务器并添加Jetty Server。 配置删除tomcat并添加Jetty Server。 1.简介 在本教程中&#xff0c;我们将学习如何从Spring Boot应用程序中删除Tomcat服务器 。 实际上&#xff0c;一旦我们添加了“ spring-boot-s…

java 方式配置ssm,关于SSM以及Spring boot中对于Spring MVC配置的问题

SSM中 Spring MVC配置传统的web.xml配置web.xmlcontextConfigLocationclasspath*:applicationContext.xmlorg.springframework.web.context.ContextLoaderListenerencodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8encodingFilter/*SpringMV…

java 并发的原子性_Java并发教程–原子性和竞争条件

java 并发的原子性原子性是多线程程序中的关键概念之一。 我们说一组动作是原子的&#xff0c;如果它们都以不可分割的方式作为单个操作执行。 认为多线程程序中的一组操作将被串行执行是理所当然的&#xff0c;可能会导致错误的结果。 原因是由于线程干扰&#xff0c;这意味着…

linux 误删除mysql表能恢复吗,Linux误删数据恢复

引子指在键上飘&#xff0c;难免会湿手套。当你按下shiftdel键后&#xff0c;会不会突然心里凉透&#xff0c;当你执行rm -rf后&#xff0c;会不会马上去搜索哪个国家入境不需要签证。或者你还会遇到如下的情况&#xff1a;root4xem7:~# aliasalias cdrm -rfalias ddocker数据恢…

Apache Camel 3.1 –更多骆驼核心优化(第3部分)

我以前曾在博客中介绍过我们在下一个Camel 3.1版本中所做的优化 博客第1部分 博客第2部分 今天&#xff0c;我想简短介绍一下我们已经完成的最新开发&#xff0c;因为我们准备在本周末或下半年准备好构建和发布Camel 3.1。 从第2部分开始&#xff0c;我们设法在路由过程中将…

mysql error 1114,mysql error 1114 table is full 处理分享

问题描述&#xff1a;一、早上上班收到报警&#xff0c;用户中心某slave不同步。二、查看情况&#xff0c;发现mysql error 1114&#xff0c;The table ‘xxxx’ is full 。。。。。三、检查其他slave&#xff0c;都出现同样问题。四、解决问题方案1、网上解决方案a、修改tmp_…

jvm jinfo 参数_jinfo:JVM运行时配置的命令行浏览

jvm jinfo 参数在最近的一些博客中&#xff08;特别是在对Java EE 7性能调优和优化以及WildFly性能调优的书中的评论中&#xff09;&#xff0c;我引用了自己过去在某些Oracle JDK命令行工具上的博客文章。 令我震惊的是&#xff0c;我从来没有专门解决过漂亮的jinfo工具&#…

matlab int 积不出,matlab – 点积:*命令与循环给出不同的结果

我在Matlab,z和beta中有两个向量.矢量z是117&#xff1a;1 0.430742139435890 0.257372971229541 0.0965909090909091 0.694329541928697 0 0.394960106863064 0 0.100000000000000 1 0.264704325268675 0.387774594078319 0.269207605609567 0.472226643323253 0.750000000000…

49自动化测试中最常见的硒异常

开发人员将始终在编写代码时牢记不同的场景&#xff0c;但是在某些情况下&#xff0c;实现可能无法按预期工作。 相同的原则也适用于测试代码&#xff0c;该代码主要用于测试现有产品的功能&#xff0c;发现错误以及使产品100&#xff05;不受错误影响。 正确地说&#xff0c;…

鹰式价差matlab,鹰式期权:什么叫铁鹰式期权组合,蝶式价差期权?

蝶式期权套利 是利用 交割月份的价差进行 套期获利&#xff0c; 个方向相 反、 共享居中交割月份合约的跨期套利组成。是一种期权策略&#xff0c;风险有限&#xff0c;盈利也有限&#xff0c;是由一手牛市套利和一手熊市套利组合而成的。铁鹰式期权组合是牛市看跌价差期权组合…