Idea中Gradle使用及多模块创建.md

一、 Gradle使用

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。——维基

  1. 自动处理包相依关系 - 取自 Maven Repos 的概念
  2. 自动处理布署问题 - 取自 Ant 的概念
  3. 条件判断写法直觉 - 使用 Groovy 语言

注:在Maven和Gradle使用上,碰到的问题是引入本地jar包,Gradle一行代码就搞定了,而Maven相当麻烦,得一个个引入,没有找到批量引入的方法。

1. settings.gradle

位于项目根目录,用于指示 Gradle 在构建应用时应将哪些模块包括在内。

rootProject.name = 'java-toolkit'
include 'toolkit-common'
include 'toolkit-config'
include 'toolkit-model'

2. build.gradle(parent)

在项目根目录下,通过allprojects{}将配置应用至整个项目,再通过subprojects{}将配置应用至整个子模块中。

// 所有项目通用配置
allprojects {
    //引入 idea 插件
    apply plugin: 'idea'

    //指定项目版本号和group
    version = '2.0'
    group = 'gradle.multi'

    idea.module.iml {
        beforeMerged { module ->
            module.dependencies.clear()
        }

        whenMerged { module ->
            module.dependencies*.exported = true
        }
    }
}

// 所有子项目的通用配置
subprojects {
    //引入java插件
    apply plugin: 'java'

    // JVM 版本号要求
    sourceCompatibility = 1.6

    // java编译的时候缺省状态下会因为中文字符而失败,所以这儿需要改为utf8
    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

    repositories {
        //本地库,local repository(${user.home}/.m2/repository)
        mavenLocal()
        //Maven中心库(http://repo1.maven.org/maven2)
        mavenCentral()
    }

    jar {
        manifest.attributes provider: 'gradle'
    }

    configurations {
        ...
    }

    dependencies {
        // 通用依赖
        compile(
            ...
        )

        // 测试依赖
        testCompile(
            ...
        )
    }
}

//如果module中名称有包含web的,则加入下面的内容
configure(subprojects.findAll {it.name.contains('web')}) {
    apply plugin: 'war'
    apply plugin: 'jetty'

    war {
        manifest {
            attributes("Implementation-Title": "Gradle")
        }
    }
}

3. build.gradle(child module)

在子模块中,单独配置特有的构建需求。

// jar或者war的名字
archivesBaseName = 'module1'

dependencies {

    compile (
        ...
    ) 
}

4. gradle.properties

Gradle某些全局参数的配置或者可以自定义Gradle文件中用到的变量,在构建脚本中使用${xxx}就可以访问该文件中定义的相关值。

env=dev
springVersion=4.3.16.RELEASE
servletApiVersion = 3.1.0
jacksonVersion=2.8.6
junitVersion=4.12
log4jVersion=2.10.0
hibernateCoreVersion=5.2.1.Final
hibernateEntityManagerVersion=5.2.1.Final
hibernateValidatorVersion=5.2.4.Final
hibernateJava8Version=5.2.1.Final
  1. 添加依赖包
dependencies {
    // 批量引入本地`jar`包
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // 引入本地指定`jar`包
    implementation files('libs/foo.jar', 'libs/bar.jar')
    // 引入远程包
    implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
    // 缩写如下
    //implementation 'org.slf4j:slf4j-simple:1.7.25'
}

二、多模块创建

多模块创建,是对项目代码进行职责分工,模块之间通过gradle或maven来管理继承和聚合,方便代码的解耦和重用,以及模块的编译、发布;

1. 先创建一个空项目:

image.png

image.png

  • GroupID 是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构,第一段为域,第二段为公司名称,域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。如com.me.moduleName
  • ArtifactID是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

接下来,一路按默认点击“下一步”,直至完成,得到下面的项目结构:
image.png

2. 创建子模块

按以下步骤,依次创建子模块toolkit-commontoolkit-configtoolkit-model
image.png
image.png
image.png

3. 最终项目结构

image.png

4. 问题记录

为什么要写这篇记录文档?

因为在刚开始创建时,我不是创建空项目,在第一步创建项目时,勾选了java,此时生成的项目就会带有src结构,如

java-toolkit
- src
- - main

为了创建最终效果的项目结构,我便手动删除了父目录的src,此时问题就出来了,每次新建子模块,父目录的src就会自动生成出来。

解决方案是:修改父目录下的build.gradle的默认配置,原数据如下:

plugins {
    id 'java'
}

group 'com.vip.toolkit'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

修改如下:

allprojects {
    group 'com.vip.toolkit'
    version '1.0-SNAPSHOT'

    repositories {
        // 本地库,local repository(${user.home}/.m2/repository)
        mavenLocal()
        // Maven中心库(http://repo1.maven.org/maven2)
        mavenCentral()
        // 指定Maven库位置
        maven { url "http://repo.maven.apache.org/maven2" }
    }
}

subprojects {
    // 引入java插件
    apply plugin: 'java'

    // 指定jvm版本
    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    // java编译的时候缺省状态下会因为中文字符而失败,所以这儿需要改为utf8
    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
}

参考:https://michaelliuyang.github.io/projectsupport/2014/11/04/gradle-multi-project.html
https://developer.android.com/studio/build/dependencies

猜你喜欢

转载自www.cnblogs.com/vipinchan/p/10475847.html