目录html
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。——维基java
注:在Maven和Gradle使用上,碰到的问题是引入本地jar
包,Gradle一行代码就搞定了,而Maven至关麻烦,得一个个引入,没有找到批量引入的方法。android
位于项目根目录,用于指示 Gradle 在构建应用时应将哪些模块包括在内。git
rootProject.name = 'java-toolkit' include 'toolkit-common' include 'toolkit-config' include 'toolkit-model'
在项目根目录下,经过allprojects{}
将配置应用至整个项目,再经过subprojects{}
将配置应用至整个子模块中。github
// 全部项目通用配置 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") } } }
在子模块中,单独配置特有的构建需求。web
// jar或者war的名字 archivesBaseName = 'module1' dependencies { compile ( ... ) }
Gradle某些全局参数的配置或者能够自定义Gradle文件中用到的变量,在构建脚本中使用${xxx}
就能够访问该文件中定义的相关值。spring
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
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来管理继承和聚合,方便代码的解耦和重用,以及模块的编译、发布;apache
- GroupID 是项目组织惟一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构,第一段为域,第二段为公司名称,域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。如
com.me.moduleName
。- ArtifactID是项目的惟一的标识符,实际对应项目的名称,就是项目根目录的名称。
接下来,一路按默认点击“下一步”,直至完成,获得下面的项目结构:
app
按如下步骤,依次建立子模块toolkit-common
、toolkit-config
、toolkit-model
。
jvm
为何要写这篇记录文档?
由于在刚开始建立时,我不是建立空项目,在第一步建立项目时,勾选了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