Gradle入门:创建二进制分发

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

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

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

让我们开始吧。

补充阅读:

创建一个二进制分布

该应用程序插件是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
:distZip

BUILD SUCCESSFUL

Total 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"
}
附加信息:

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

> gradle distZip
:compileJava
:processResources
:classes
:jar
:startScripts
:distZip

BUILD SUCCESSFUL

Total 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 ""
}
补充阅读:

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

> gradle distZip
:copyLicense
:compileJava
:processResources
:classes
:jar
:startScripts
:distZip

BUILD SUCCESSFUL

Total time: 5.594 secs

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

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

摘要

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值