关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » JAVA »使用Gradle构建Java项目

    使用Gradle构建Java项目

    2015-05-07 00:00:00 出处:oschina
    分享

    使用Gradle构建Java项目

    这个手册将通过一个简单的Java项目向大家介绍如何使用Gradle构建Java项目。

    我们将要做什么?

    我们将在这篇文档航中创建一个简单的Java项目,然后使用Gradle构建它。

    需要准备什么?

    预留15分钟空闲时间 一件称手的兵器(你最喜欢的IDE或者文本编辑器) Java环境([JDK6](http://www.oracle.com/technetwork/java/javase/downloads/index.html”JDK”及以上版本)

    如何完成这个手册的内容?

    与大多数Spring的入门手册一样,你可以从头开始一步步完成教程中的每一步工作,也可以跳过你已经烂熟的基础步骤。不管采用那种方式,你最后都会得到可工作的代码。

    如果要重头开始,猛戳这里 如果要跳过基础部分,需执行以下操作: 下载并解压ITJS的这篇文章档相关源代码,或者使用Git克隆一个:git clone https://github.com/spring-guides/gs-gradle.git cd 进入 gs-gradle/initial 参考到安装Gradle部分

    当你完成后,你可以使用gs-gradle/complete来检查你的结果。

    配置项目

    首先需要配置一个项目给Gradle进行构建。为了保证我们能专注于Gradle,目前最好创建最简单的Java项目。

    创建目录结构

    在项目主目录下,创建以下子目录;在*nix系统下可以使用命令:mkdir -p src/main/java/hello

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

    在src/main/java/hello目录中,你可以创建任何Java类。为简单起见并且为了与指南的其余部分保持一致,我们建议创建两个雷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的时候了。

    Gradle可以从http://www.gradle.org/downloads下载。我们仅需要下载Gradle的二进制发布包,所以在刚才提供的连接上寻找gradle-version-bin.zip文件(当然,也可以下载gradle-version-all.zip,它包含源代码、文档以已编译代码)

    解压缩下载的文件,并将解压后目录中的bin目录加到环境变量中。

    可以在命令行中执行以下代码来测试Gradle是否安装成功

    gradle

    如果你很幸运,嘛事都OK,你会看到下面的welcome信息:

    :help
    
    Welcome to Gradle 1.8.
    
    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的手册先。

    Gradle可以做些什么呢?

    Gradle已经安装到系统上了,那么它可以做什么呢?在我们为项目创建build.gradle文件之前,我们可以先问一下Gradle目前有哪些可用的任务(Tasks):

    gradle tasks

    我们可以看到可用任务(Tasks)的列表。假设你执行Gradle的目录不存在build.gradle文件,你可以看到一些非常基础的任务,类似于:

    :tasks
    
    == All tasks runnable from root project
    
    == Build Setup tasks
    setupBuild - Initializes a new Gradle build. [incubating]
    wrapper - Generates Gradle wrapper files. [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中配置了插件(plugins)上面的任务列表会变得更长,最好在配置插件后使用gradle task看看那些任务是可用的。

    刚说到配置插件,马上我们就会配置一个插件来启用基础的Java构建功能。

    构建Java代码

    先从简单的开始,创建一个最简单的只有一行的build.gradle文件:

    apply plugin: 'java'

    别看只有一行配置,提供的能力可不是一点点哦。再执行一下gradle task,我们可以看到任务列表中增加了一些内容,比如:用来编译java项目的任务、用来创建JavaDoc的任务、用来执行单元测试的任务。

    我们经常使用的任务是gradle build,这个任务执行以下操作:编译、执行单元测试、组装Jar文件:

    gradle build

    几秒钟以后,会看到”BUILD SUCCESSFUL”输出,说明构建已经完成了。

    可以到”build”目录中查看构建结构,在这个目录中我们可以看到很多子目录,其中有三个我们需要特别注意:

    classes: 保存被编译后的.class文件 reports: 构建报告(如:测试报告) lib: 组装好的项目包(通常为:.jar或者.war文件)

    classes目录包含编译生成的所有.class文件。执行完编译后,我们应该可以在这里找到”HelloWorld.class”和”Greeter.class”。

    到目前为止,我们项目并没有申明任何依赖,所以”debendency_cache”目录是空的。

    “reports”目录会包含项目单元测试的测试报告,当然,当前项目并未编写任何单元测试,所以,也是空目录。

    “lib”目录包含打包后的jar或war文件,在后面的内容中我们将学会如何定义JAR的名称和版本号。

    申明依赖

    我们的Hello World例程非常简单且不依赖于任何第三方库,但是大多数应用程序都会依赖第三方库提供的通用或复杂的功能。

    例如:假设我们希望更好的说”Hello World!”,我们希望应用程序能同时输出当前的日期和时间。当然这可以使用Java自身的日期和时间相关库,但是我们可以使用”Joda Time”库实现更有趣的功能。

    首先,把HelloWorld.jara类修改成下面这样:

    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 {
        mavenLocal()
        mavenCentral()
    }

    上面的repositories定义,告诉构建系统通过Maven中央库来检索项目依赖的软件包,Gradle在很大程度上依赖Maven构建工具的许多约定和基础功能,包括使用Maven中央的库来处理依赖关系。

    现在我们可以使用第三方库了,但现需要定义:

    dependencies {
        compile "joda-time:joda-time:2.2"
    }

    使用dependencies块,我们定义了一条Joda Time的依赖项。这里,明确指定使用joda-time组内的版本为2.2的joda-time库。

    另一个要注意的是,我们在这个依赖定义中指定依赖是compile范围的。意思是,这个库在编译和运行时都需要(如果我们正在构建WAR文件,这个文件会在/WEB-INF/libs目录下)。另外值得注意的依赖类型包括:

    providedCompile:在编译期间需要这个依赖包,但在运行期间可能由容器提供相关组件(比如:Java Servlet API) testCompile:依赖项仅在构建和运行测试代码时需要,在项目运行时不需要这个依赖项。

    最后,我们来定义我们将生成的Jar文件的名字:

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

    jar块定义如何命名JAR文件,在上面的例子中,我们的JAR文件的名字为:gs-gradle-0.1.0.jar。

    注:这个时候如果执行gradle build,Gradle会花一些时间从Maven中央库下载Joda Time包(具体下载时间依赖于你的网速)

    使用Gradle Wrapper来构建项目

    Gradle Wrapper是开始一个Gradle构建的首选方式。它包含了windows批处理以及OS X和Linux的Shell脚本。这些脚本允许我们在没有安装Gradle的系统上执行Gradle构建。要实现这个功能,我们需要在我们的build.gradle文件中增加以下代码:

    task wrapper(type: Wrapper) {
        gradleVersion = '1.11'
    }

    执行下面代码来下载和初始化wrapper脚本:

    gradle wrapper

    命令执行完后,我们可以看到增加了一些新文件。有两个文件在根目录下,wapper的jar文件和properties文件在新增的gradle/wrapper目录下。

    └── initial
        └── gradlew
        └── gradlew.bat
        └── gradle
            └── wrapper
                └── gradle-wrapper.jar
                └── gradle-wrapper.properties

    现在Gradle Wrapper已经可以用来构建系统了。把这些文件增加到版本控制系统中,然后再任何时候、任何地方只要迁出这些文件就一个按照同样的方式(与当前生成 Wrapper的Gradle版本一致)构建系统。运行wrapper脚本来构建系统,跟我们之前桥的命令很像:

    ./gradlew build

    当第一次通过wrapper使用指定版本的Gradle构建系统时,wrapper首先下载对应版本的Gradle可执行文件。Gradle Wrapper的所有文件在都可以被提交到版本库中,所以,任何人都可以在没有安装Gradle的环境下使用相同版本的Gradle构建系统。

    在这个时候,我们需要重新构建我们的代码,构建的结果目录如下:

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

    Jar文件中包含我们希望打包的Gretter和HelloWorld类。

    $ 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文件也不是可运行JAR文件。

    要想让代码可以运行,我们可以使用Gradle的application插件。增加以下内容到build.gradle文件中。

    apply plugin: 'application'
    
    mainClassName = 'hello.HelloWorld'

    现在我们的app可以执行了。

    $ ./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了。

    下面是ITJS的这篇文章需要用的的build.gradle文件:

    apply plugin: 'java'
    apply plugin: 'Eclipse'
    apply plugin: 'application'
    
    mainClassName = 'hello.HelloWorld'
    
    // tag::repositories[]
    repositories {
        mavenLocal()
        mavenCentral()
    }
    // end::repositories[]
    
    // tag::jar[]
    jar {
        baseName = 'gs-gradle'
        version =  '0.1.0'
    }
    // end::jar[]
    
    // tag::dependencies[]
    dependencies {
        compile "joda-time:joda-time:2.2"
    }
    // end::dependencies[]
    
    // tag::wrapper[]
    task wrapper(type: Wrapper) {
        gradleVersion = '1.11'
    }
    // end::wrapper[]

    注意:文件中有很多start/end注释,这些注释是为了方便拷贝文件中的内容到文章的各个部分,在实际使用中不需要包含他们。

    总结

    恭喜,你已经创建了一个简单的然而可用的Gradle构建文件来构建Java项目。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    小米路由器买哪款?Miwifi热门路由器型号对比分析

    IT头条

    Synology 对 Office 套件进行重大 AI 更新,增强私有云的生产力和安全性

    01:43

    StorONE 的高效平台将 Storage Guardian 数据中心占用空间减少 80%

    11:03

    年赚千亿的印度能源巨头Nayara 云服务瘫痪,被微软卡了一下脖子

    12:54

    国产6nm GPU新突破!砺算科技官宣:自研TrueGPU架构7月26日发布

    01:57

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    技术热点

    最全面的前端开发指南

    Windows7任务栏桌面下角的一些正在运行的图标不见了

    sql server快速删除记录方法

    SQL Server 7移动数据的6种方法

    SQL Server 2008的新压缩特性

    每个Java程序员必须知道的5个JVM命令行标志

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。