使用Gradle构建Java项目

使用Gradle构建Java项目

原文地址:https://spring.io/guides/gs/gradle/#scratch

你需要什么

  • 大约15分钟
  • 最喜欢的文本编辑器或IDE
  • JDK 6或更高版本

设置项目

首先你为Gradle建立一个Java项目。为了将重点放在Gradle上,现在尽可能简化项目。

创建目录结构

在您选择的项目目录中,创建以下子目录结构; 例如,使用mkdir -p src/main/java/hello(unix系统):

└── src
    └── main
        └── java
            └── hello

在src/main/java/hello目录中,你可以创建你想要的任何Java类。为了简单起见,为了与本指南的其余部分保持一致,Spring建议您创建两个类:HelloWorld.java和Greeter.java。

src/main/java/hello/HelloWorld.java

package hello;

public class HelloWorld {
  public static void main(String[] args) {
    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

src/main/java/hello/Greeter.java

package hello;

public class Greeter {
  public String sayHello() {
    return "Hello world!";
  }
}

安装Gradle

既然您有一个可以使用Gradle构建的项目,那么您可以安装Gradle。

强烈建议使用安装程序:

  • SDKMAN
  • 自制软件(brew install gradle)

作为最后的手段,如果这些工具都不符合您的需求,您可以从http://www.gradle.org/downloads下载二进制文件。只有二​​进制文件是必需的,所以请查找gradle- version -bin.zip 的链接。(您也可以选择gradle- version -all.zip来获取源代码和文档以及二进制文件。)

将文件解压缩到您的计算机上,然后将bin文件夹添加到您的路径中。

要测试Gradle安装,请从命令行运行Gradle:

gradle

如果一切顺利,你会看到这个:

:help

Welcome to Gradle 2.3.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

BUILD SUCCESSFUL

Total time: 2.675 secs

现在安装成功

了解Gradle能做些什么

现在已经安装了Gradle,看看它可以做什么。在为项目创建build.gradle文件之前,您可以询问它可以使用哪些任务:

gradle tasks

您应该看到可用任务的列表。假设你在一个没有build.gradle文件的文件夹中运行Gradle ,你会看到一些非常基本的任务,例如:

:tasks

== All tasks runnable from root project

== Build Setup tasks
setupBuild - Initializes a new Gradle build. [incubating]

== Help tasks
dependencies - Displays all dependencies declared in root project 'gs-gradle'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gs-gradle'.
help - Displays a help message
projects - Displays the sub-projects of root project 'gs-gradle'.
properties - Displays the properties of root project 'gs-gradle'.
tasks - Displays the tasks runnable from root project 'gs-gradle'.

To see all tasks and more detail, run with --all.

BUILD SUCCESSFUL

Total time: 3.077 secs

即使这些任务可用,但没有项目构建配置,它们不会提供太多价值。当你填充build.gradle文件时,会有一些更有用的任务。添加插件时build.gradle,任务列表会增加,因此您偶尔会想要再次运行任务以查看可用的任务。

说到添加插件,接下来您添加一个支持基本Java构建功能的插件。

构建Java代码

从简单build.gradle开始,在本指南开始处创建的<项目文件夹>中创建一个非常基本的文件。只给它一行:

apply plugin: 'java'

构建配置中的这一行将带来大量的功耗。再次运行gradle任务,您会看到添加到列表中的新任务,包括构建项目,创建JavaDoc和运行测试的任务。

你会经常使用gradle构建任务。此任务编译,测试并将代码组装到JAR文件中。你可以像这样运行它:

gradle build

几秒钟后,“建立成功”表示构建已完成。

要查看构建工作的结果,请查看构建文件夹。其中你会发现几个目录,包括这三个值得注意的文件夹:

  • classes。该项目的编译的.class文件。
  • report。构建生成的报告(例如测试报告)。
  • lib。组装项目库(通常是JAR和/或WAR文件)。

classes文件夹具有从编译Java代码生成的.class文件。具体来说,你应该找到HelloWorld.class和Greeter.class。

此时,该项目没有任何库依赖项,因此dependency_cache文件夹中没有任何内容。

报告文件夹应该包含项目运行单元测试的报告。由于该项目尚未进行任何单元测试,因此该报告将毫无趣味。

libs文件夹应该包含一个以项目文件夹命名的JAR文件。再往下,你会看到如何指定JAR的名称及其版本。

声明依赖关系

简单的Hello World示例是完全自包含的,不依赖于任何其他库。但是,大多数应用程序依赖于外部库来处理常见和/或复杂的功能。

例如,假设除了说出“Hello World!”之外,还希望应用程序打印当前的日期和时间。您可以在本地Java库中使用日期和时间工具,但通过使用Joda时间库,您可以使事情更加有趣。

首先,将HelloWorld.java改为如下所示:

package hello;

import org.joda.time.LocalTime;

public class HelloWorld {
  public static void main(String[] args) {
    LocalTime currentTime = new LocalTime();
    System.out.println("The current local time is: " + currentTime);

    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

这里HelloWorld使用Joda Time的LocalTime课程来获取并打印当前时间。

如果您gradle build现在运行以构建项目,则构建将失败,因为您尚未将Joda Time声明为构建中的编译依赖项。

对于初学者,您需要为第三方库添加源代码。

repositories {
    mavenCentral()
}

该repositories块表示构建应该从Maven Central存储库解析它的依赖关系。Gradle严重依赖Maven构建工具建立的许多约定和设施,包括使用Maven Central作为中央库依赖项的来源。

现在我们已经准备好了第三方库,让我们声明一些。

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile "joda-time:joda-time:2.2"
    testCompile "junit:junit:4.12"
}

通过该dependencies块,您可以为Joda Time声明一个依赖关系。具体来说,你需要(从右到左)乔达时间库的2.2版本,在乔达时间组中。

关于这种依赖关系的另一件事是它是一个compile依赖关系,表明它应该在编译期间可用(并且如果您正在构建一个包含在WAR的/ WEB-INF / libs文件夹中的WAR文件)。其他值得注意的依赖类型包括:

  • providedCompile。编译项目代码所需的依赖关系,但运行时将由运行代码的容器(例如Java Servlet API)提供。

  • testCompile。用于编译和运行测试的依赖关系,但不是构建或运行项目运行时代码所必需的。

最后,让我们为我们的JAR工件指定名称。

jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}

该jar块指定了如何命名JAR文件。在这种情况下,它会渲染gs-gradle-0.1.0.jar。

现在,如果你运行gradle build,Gradle应该解决来自Maven Central存储库的Joda时间依赖关系,并且构建会成功。

使用Gradle Wrapper构建您的项目

Gradle Wrapper是启动Gradle构建的首选方式。它由用于Windows的批处理脚本和用于OS X和Linux的shell脚本组成。这些脚本允许您运行Gradle构建,而无需在您的系统上安装Gradle。这曾经是添加到您的构建文件的东西,但它已被折叠到Gradle中,因此不再需要。相反,您只需使用以下命令。

$ gradle wrapper --gradle-version 2.13

完成此任务后,您会注意到一些新文件。这两个脚本位于文件夹的根目录中,而包装jar和属性文件已添加到新gradle/wrapper文件夹。

└── <project folder>
    └── gradlew
    └── gradlew.bat
    └── gradle
        └── wrapper
            └── gradle-wrapper.jar
            └── gradle-wrapper.properties

Gradle Wrapper现在可用于构建您的项目。将它添加到您的版本控制系统中,克隆项目的每个人都可以构建它。它可以以与安装的Gradle版本完全相同的方式使用。像以前一样运行包装脚本来执行构建任务:

gradlew build

第一次运行指定版本的Gradle的包装器时,它会下载并缓存该版本的Gradle二进制文件。Gradle Wrapper文件被设计为致力于源代码控制,以便任何人都可以构建项目而无需首先安装和配置特定版本的Gradle。

在这个阶段,你将建立你的代码。你可以在这里看到结果:

build
├── classes
│   └── main
│       └── hello
│           ├── Greeter.class
│           └── HelloWorld.class
├── dependency-cache
├── libs
│   └── gs-gradle-0.1.0.jar
└── tmp
    └── jar
        └── MANIFEST.MF

包括的是两个预期类文件Greeter和HelloWorld,以及JAR文件。快速浏览一下:

$ jar tvf build/libs/gs-gradle-0.1.0.jar
  0 Fri May 30 16:02:32 CDT 2014 META-INF/
 25 Fri May 30 16:02:32 CDT 2014 META-INF/MANIFEST.MF
  0 Fri May 30 16:02:32 CDT 2014 hello/
369 Fri May 30 16:02:32 CDT 2014 hello/Greeter.class
988 Fri May 30 16:02:32 CDT 2014 hello/HelloWorld.class

类文件捆绑在一起。重要的是要注意,即使您将joda-time声明为依赖项,图书馆也不在此处。而JAR文件也不能运行。

为了使这段代码可以运行,我们可以使用gradle的application插件。将此添加到您的build.gradle文件中。

apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

然后你可以运行应用程序!

$ gradlew run
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run
The current local time is: 16:16:20.544
Hello world!

BUILD SUCCESSFUL

Total time: 3.798 secs

捆绑依赖需要更多的思考。例如,如果我们构建一个WAR文件,这个格式通常与第三方依赖包中的打包相关联,我们可以使用gradle的WAR插件。如果您使用的是Spring Boot并希望有一个可运行的JAR文件,那么spring-boot-gradle-plugin非常方便。在这个阶段,Gradle不太了解你的系统做出选择。但现在,这应该足以开始使用gradle。

为了包装本指南,下面是完整的build.gradle文件:

build.gradle

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

// tag::repositories[]
repositories {
    mavenCentral()
}
// end::repositories[]

// tag::jar[]
jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}
// end::jar[]

// tag::dependencies[]
sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile "joda-time:joda-time:2.2"
    testCompile "junit:junit:4.12"
}
// end::dependencies[]

// tag::wrapper[]
// end::wrapper[]

这里嵌入了许多开始/结束评论。这使得可以将构建文件的一部分提取到本指南中以获得上述详细解释。生产构建文件中不需要它们。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值