• Gradle 多项目构建


    Gradle可以轻松处理各种大小规模的项目。小项目由一个单一的构建文件和一个源代码树构成。 大项目可以将其拆分成更小的,相互依赖的模块,以便更容易理解。

    多项目构建的结构特征:

    • 在项目的根目录或主目录中都有一个settings.gradle文件。
    • 根目录或主目录都有一个build.gradle文件。
    • 具有自己的build.gradle构建文件的子目录。

    设置:

    allprojects 针对所有的子项目和本身起作用,全局设置项。

    allprojects {
       group = 'MavenRoot'
       version = '0.0.1-SNAPSHOT'
    }

    subprojects针对所有的子项目起作用。

    subprojects{
    	apply plugin: 'java'
    	apply plugin: 'eclipse'
    }

    项目依赖:

    // MavenView中添加
    dependencies {
       compile project(':MavenCore')
       compile project(':MavenCommon')
    }

    如果有平级项目之间的依赖MavenView中 settings.gradle:

    includeFlat 'MavenCommon'

    includeFlat 'MavenCore'

    以Maven的多模块项目为例:

    在MavenRoot下创建settings.gradle和build.gradle

    在settings.gradle 内写子项目:

    rootProject.name = 'MavenRoot'
    
    include 'MavenCore'
    include 'MavenCommon'
    include 'MavenView'

    验证子项目:

    Colsure cl = {task -> println "I'm $task.project.name"}
    task hello2 << cl
    project(":MavenCore"){
    	task hello2 << cl
    }
    project(":MavenView"){
    	task hello2{
    		doLast cl
    	}
    }

     在 allProjects中使用:

    allprojects {
       group = 'MavenRoot'
       version = '0.0.1-SNAPSHOT'
       
       task hello2{
       	description="hello2"
       	doLast {
       		task -> println "$task.project.name"
       	}
       }
    }

    subProjects中使用:

    此时hello2不能再定义task,因同名task只能有一个,因此一旦上面定义了task后面只能对task进行配置

    // sub project settting
    subprojects{
    	apply plugin: 'java'
    	apply plugin: 'eclipse'
    	hello2{
    		doLast{
    			task -> println "$task.project.name"
    		}
    	}
    }

     或者: 

    hello2.doLast{
        task -> println "$task.project.name"
    }

    指定单独运行:

    project(":MavenView").hello2.doLast{
    	println "I'm  the special one..."
    }

     以上子集的这几个方法必须建立在allprojects中已经构建此hello2任务。

    子集建立build.gradle,如果allprojects中已经对子集声明此方法,则子集中不可再构建。

    task hello3{
    	doLast {
    	     println "i 'm $task.name"
    	}
    }

    执行报错:> Could not get unknown property 'task' for task ':MavenCore:hello3' of type org
    .gradle.api.DefaultTask.

     因 $默认指向的是project的成员变量,因此task无法找到。

    需要切换内部指向为task。

    task hello3{
    	doLast {
    		task -> println "i 'm $task.name"
    	}
    }

     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     以上为多项目之间的关系说明。

    Gradle多项目整合:

    • 如何在Gradle中使用其他模块在一个模块中;
    • 使用Gradle打包多个模块(输出为:jar,war);
    • 在Gradle Tomcat插件上运行Web应用程序;

     之前建立了HelloGradle的web应用,下面再建立一个CommonGradle和一个RootGradle。

    其中RootGradle为容器,整合CommonGradle和HelloGradle,helloGradle引用CommonGradle。

    CommonGradle和RootGradle的建立:

    右键->new -> other ->gradle -> gradle project ->[projectName] ->options [local installation diractory][Gradle User home]

    ->OK

     在RootGradle的setting.gradle下创建子项目

    rootProject.name = 'RootGradle'
    
    include 'CommonGradle'
    include 'HelloGradle'
    project(':CommonGradle').projectDir = new File(settingsDir, '../CommonGradle')
    project(':HelloGradle').projectDir = new File(settingsDir, '../HelloGradle')

     build.gradle下创建内容:

    apply plugin: 'java'
    apply plugin: 'eclipse'
    
    // In this section you declare where to find the dependencies of your project
    repositories {
    	mavenLocal()
    	maven{ 
    		url 'http://maven.aliyun.com/nexus/content/groups/public/'
    	}
    	mavenCentral()
        jcenter()
    }
    
    allprojects{
    	group "com.hg"
    	version "1.0.0-SNAPSHOT"
    }
    
    def artifactId="RootGradle"
    
    dependencies {
        compile 'com.google.guava:guava:20.0'
        testCompile 'junit:junit:4.12'
        compile project(":HelloGradle")
        compile project(":CommonGradle")
    }

    HelloGradle的build.gradle中创建:

    将CommonGradle中的类用在HelloGradle中

    dependencies {
        compile project(':CommonGradle')
    }

    CommonGradle的build.gradle中创建:

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

    在cmd->RootGradle中

    gradle tomcatStart

    在文件的build的libs下就有打包成的jar和war文件。

  • 相关阅读:
    HttpRunner3.X
    基于C++的ByteBuf封装
    关于matlab的配色
    关于样本方差的无偏估计
    使用Python求解Nonogram
    菜鸡的一些力扣记录
    LeetCode链表练习
    C语言中的链表
    Python中的链表简介
    Nebula Graph 源码解读系列 | Vol.03 Planner 的实现
  • 原文地址:https://www.cnblogs.com/DennyZhao/p/7736694.html
Copyright © 2020-2023  润新知