zoukankan      html  css  js  c++  java
  • gradle入门(1-4)多项目构建实战

    一、多项目构建

    1、多项目构建概念

    尽管我们可以仅使用单个组件来创建可工作的应用程序,但有时候更广泛的做法是将应用程序划分为多个更小的模块。

    因为这是一个非常普遍的需求,因此每个成熟的构建工具都必须支持这项功能,Gradle也不例外。

    如果Gradle项目拥有多于一个组件,我们就称之为多项目构建(multi-project build)。

    2、多项目构建的需求描述

    我们的例子拥有两个模块:

    2.1、core模块:

    包含一些通用的组件,它们能够被程序的其他模块使用。

    在我们的例子上,只包含一个类:MessageService类返回‘Hello World!’字符串。

    该模块只有一个依赖:它包含一个单元测试,使用Junit 4.11。

    2.2、app模块:

    包含HelloWorld类,是程序的开端,

    它从MessageService对象中获取信息,并将接收到的信息写入一个日志文件中。

    该模块拥有两个依赖:它需要core模块,还使用Log4j 1.2.17作为日志库。

    3、建立多项目的gradle工程

    下面我们将创建一个多项目的Gradle构建,包括两个子项目:app 和 core。

    3.1、建立目录结构

    初始阶段,先要建立Gradle构建的目录结构。

    建立core模块的根目录(core),并建立以下子目录:

    src/main/java目录包含core模块的源代码。

    src/test/java目录包含core模块的单元测试。

    建立app模块的根目录(app),并建立以下子目录:

    src/main/java目录包含app模块的源代码。

    src/main/resources目录包含app模块的资源文件。

    3.2、配置根项目

    我们可以通过以下步骤,对包含在多项目构建中的项目进行配置:

    1. 在根项目的根目录下创建settings.gradle文件,一个多项目Gradle构建必须含有这个文件,因为它指明了那些包含在多项目构建中的项目。
    2. 确保app和core项目包含在我们的多项目构建中。

    我们的settings.gradle文件如下:

    include 'app'

    include 'core'

    3.3、配置core子项目 

    我们可以通过以下步骤对core项目进行配置:

    • 1. 在core项目的根目录下创建build.gradle文件。
    • 2. 使用Java插件创建一个Java项目。
    • 3. 确保core项目从Maven2中央仓库(central Maven2 repository)中获取依赖。
    • 4. 声明JUnit依赖(版本4.11),并使用testCompile配置项,该配置项表明:core项目在它的单元测试被编译前,需要JUnit库。

    core项目的build.gradle文件如下:

    apply plugin: 'java' 

    repositories {
        mavenCentral()
    } 
    dependencies {
        testCompile 'junit:junit:4.11'
    } 

    3.4、配置app子项目 

    在配置app项目之前,我们先来快速浏览一下对一些特殊依赖的依赖管理,这些依赖都是同一个多项目构建的一部分,我们将其称之为”项目依赖“。

    如果多项目构建拥有项目A和B,同时,项目B的编译需要项目A,我们可以通过在项目B的build.gradle文件中添加以下依赖声明来进行依赖配置。

    dependencies{

        compile project('A')

    }

    现在,我们可以按照以下步骤配置app项目:

    1. 在app项目的根目录下创建build.gradle文件。
    2. 用Java插件创建一个Java项目。
    3. 确保app项目从Maven2中央仓库(central Maven2 repository)中获取依赖。
    4. 配置所需的依赖,app项目在编译时需要两个依赖:Log4j (version 1.2.17)和core 模块
    5. 创建二进制发布版本

    apply plugin: 'application'

    apply plugin: 'java'

    repositories {
        mavenCentral()
    }
    dependencies {
        compile 'log4j:log4j:1.2.17'
        compile project(':core')
    }
    mainClassName = 'net.petrikainulainen.gradle.client.HelloWorld'
    task copyLicense {
        outputs.file new File('$buildDir/LICENSE')
        doLast {
            copy {
                from 'LICENSE'
                into '$buildDir'
            }
        }
    }
    applicationDistribution.from(copyLicense) {
        into '';
    } 

    二、多项目构建优化 - 移除重复配置

    1、提升冗余配置到根项目

    subprojects {

        apply plugin: 'java' 
        repositories {
            mavenCentral()
        }
    } 
    // 所有项目所共享的配置
    allprojects {
        //Add configuration here
    }

    2、在根项目中指名配置子项目

    2.1、core/build.gradle文件

    dependencies{

        testCompile 'junit:junit:4.11'

    }

    2.2、app/build.gradle文件

    apply plugin: 'application'

    dependencies{

         compile 'log4j:log4j:1.2.17'

         complile project(':core')

    }

    mainClassName='com.inspur.example.gradle.HelloGradle'

    task copyLicense {
        outputs.file new File('$buildDir/LICENSE')
        doLast {
            copy {
                from 'LICENSE'
                into '$buildDir'
            }
        }
    }
    applicationDistribution.from(copyLicense) {
        into '';
    }  

    3、构建多项目 gradle projects

    这条命令执行结果会列出根项目下的子项目(app和core),意味着多项目Gradle构建成功了。

    三、附录

    1、如何查看gradle插件提供的各种任务----->gradle tasks 

    举个例子,Java插件在我们的构建中加入了很多任务,如:

    • assemble 任务会编译程序中的源代码,并打包生成Jar文件,这个任务不执行单元测试。
    • build 任务会执行一个完整的项目构建。
    • clean 任务会删除构建目录。
    • compileJava 任务会编译程序中的源代码。

    如何查看这些任务呢?我们通过 gradle tasks:

  • 相关阅读:
    [小技巧] micropython 如何执行 *.mpy 文件
    从零开始深入 Linux 底层(软件工程)
    从嵌套结构中取值时如何编写兜底逻辑
    学习JUC源码(2)——自定义同步组件
    学习JUC源码(1)——AQS同步队列(源码分析结合图文理解)
    Java多线程中的wait/notify通信模式
    详解Java锁的升级与对比(1)——锁的分类与细节(结合部分源码)
    认识Redis集群——Redis Cluster
    工作三年多的感慨与总结(二)
    工作三年多的感慨与总结(一)
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/6992712.html
Copyright © 2011-2022 走看看