buildscript {
repositories {
jcenter()
dependencies {
classpath 'net.researchgate:gradle-release:2.4.0'
allprojects {
apply from: "${rootProject.projectDir}/common.gradle"
这样所有的子模块包括父项目都可以使用 common.gradle 里面配置好的 Task 了。当我们执行 gradle release
时,那么父项目以及子项目都会执行 release 操作了。是不是类似 Maven Parent 继承方式了。
那么问题来了,有人会问,如果我下边的子项目例如 rpc 模块,它是一个基础服务,它不使用该插件,这样执行会强制执行了 release 操作啦,再或者例如 api 模块,它不需要执行 release,再或者父项目只需要执行 release 不需要执行 upload 等等。
像这种问题,也可以解决掉,一种方式是启动时指定子模块或者父模块。
gradle release // 执行所有模块
gradle :release // 只执行父模块
gradle web:release // 只执行 web 子模块
gradle web:release api:release //只执行 web、api子模块
另一种方式是,配置 apply from: "${rootProject.projectDir}/common.gradle"
到指定子模块的 build.gradle 文件中,这样就只有该子模块可使用通用配置了。
第二种方式:指定模块执行方式,修改父项目根目录下 build.gradle 以及指定模块目录下 ${subMOdule}/build.gradle
1、修改父项目根目录下 build.gradle
buildscript {
repositories {
jcenter()
dependencies {
classpath 'net.researchgate:gradle-release:2.4.0'
apply plugin: 'java'
apply plugin: 'net.researchgate.release'
allprojects {
repositories {
maven {
url "http://127.0.0.1:9998/nexus/content/groups/public"
artifactUrls "http://127.0.0.1:9998/nexus/content/repositories/thirdparty"
2、修改 web 模块,web/build.gradle 增加配置:
apply from: "${rootProject.projectDir}/common.gradle"
注意:这里我设置 api 模块不继承 common.gradle,web 模块继承,父模块不继承只定义了 release 插件。
这样一来,在执行 gradle release
就执行父模块以及 web 模块了。如果父项目不配置使用release 插件,则执行 gradle release
就只执行 web 模块了。当然,执行 gradle web:release
还是会只执行 web 模块的。
具体 gradle-release 以及 java uploadArchives 插件操作效果这里就不截图演示了。跟 Java Maven项目之Nexus私服搭建和版本管理应用 文章后半部分版本管理应用功能类似。
6、FAQ
6.1 配置完 Muti-project 后,会去自动下载 https://services.gradle.org/distributions/gradle-{version}-all.zip,没有网络或者内网时下载不下来。解决办法如下:
1、到 ~/.gradle/wrapper/dists/gradle-{version}-all/ 下边,不规则命名的文件夹下边找到gradle-{version}-all.zip。
2、去指定网址下载该版本的 gradle-{version}-all.zip。
将 gradle-{version}-all.zip 拷贝到该项目根目录 gradle/wrapper/ 下,并修改 gradle-wrapper.properties 配置,将 distributionUrl 修改为 distributionUrl=gradle-{version}-bin.zip 就可以了。
6.2 配置使用第三方插件有两种方式,当在 common.gradle 中,使用 plugins { ... }
方式时,子模块使用 apply from {path_common.gradle } | {http_common.gradle }
时,会报错
* What went wrong:
Could not compile script '/Users/wanyang3/git/gradle_demo/common.gradle'.
> startup failed:
script '/Users/wanyang3/git/gradle_demo/common.gradle': 10: Only Project build scripts can contain plugins {} blocks
See https://docs.gradle.org/4.1/userguide/plugins.html
@ line 10, column 1.
plugins {
1 error
这个 gradle 规定就是这样的,期待以后支持吧。解决办法就是换成如下方式:
buildscript {
repositories {
jcenter()
dependencies {
classpath 'net.researchgate:gradle-release:2.4.0' // release plugin
apply plugin: 'net.researchgate.release'
6.3 在 common.gradle 中已经定义了 buildscript { ... }
依赖插件,在父模块根目录 build.gradle 中不在指定 buildscript { ... }
,会报错:
* What went wrong:
A problem occurred evaluating root project 'gradle_demo'.
> Plugin with id 'net.researchgate.release' not found.
这个需要在父模块根目录 build.gradle 中再次指定一下 buildscript { ... }
依赖插件就行。
==========================这里是分界线==========================
经过再次测试,发现也可在父模块根目录 build.gradle 中不指定 buildscript { ... }
依赖插件,也可以直接使用 common.gradle 定义的插件,方法就是:
修改 common.gradle
buildscript {
repositories {
jcenter()
dependencies {
classpath 'net.researchgate:gradle-release:2.4.0'
if (!project.plugins.findPlugin(net.researchgate.release.ReleasePlugin))
project.apply(plugin: net.researchgate.release.ReleasePlugin)
注意:net.researchgate.release.ReleasePlugin
这个是插件的主函数,可在该插件 GitHub 项目源码 src/main/resources/META-INF/gradle-plugins/net.researchgate.release.properties 文件中找到 implementation-class=net.researchgate.release.ReleasePlugin
,应用其他插件方式同上即可。
Gradle 是基于 JVM 的构建工具,是基于 Ant 、Maven、ivy 概念的一款通用灵活的构建工具,基于 Groovy 脚本构建,目前支持 Java、Groovy、Kotlin 和 Scala 语言,能够满足日常开发中复杂构建需求的开源工具。定义公共插件扩展文件,项目需要使用的时候,直接继承 common.gradle 就能使用定义的 Task,实现类似 Maven Parent 继承方式
当您来自Maven背景时,很可能已经习惯了父pom结构。
现在,在进行gradle时,情况有所不同。
想象一下有一个包含接口和各种其他实现的项目的场景。 这将是我们的项目结构。
multi-project-gradle
-- specification
-- core
-- implementation-a
-- implementation-b
规范项目包含接口,实现将基于...
使用springboot+kotlin+ktor+gradle搭建多模块项目例子,该项目整合MybatisPlus做为数据库框架,可搭配文章‘SpringBoot整合Ktor2与MybatisPlus’ 与 ‘ktor 2.0的使用教程之实现log日志和jwt封装与异常处理’一起使用,希望有更多人希望ktor这个框架,目前看情况比springmvc要轻量级很多,由于ktor使用netty做为内置服务器,理论上会比springboot内置服务器性能要高,而且ktor是针对kotlin协程封装的,之所以推荐ktor主要是因为ktor与kotlin是一家公司推出的不用担心可维护性的问题,ktor适合做为微服务内置框架当然vertx也同样适合,但由于主要使用springboot做为kotlin的依赖注入优先考虑使用相同技术栈,目前ktor也是能对接Shiro做权限管理的,数据库访问层使用MybatisPlus目测也能达到主流开发框架之一,同样的使用kotlin可以简化一些代码。
参考文档:gradle的官方userguide.pdf文档的chapter 55和chapter 56.
gradle的多模块或项目开发一定不会比maven差,在我看来!大的项目分成多个模块来开发是常事.下文就介绍一下怎么用gradle开发多模块项目.对于gradle,在Eclipse和IDEA开者之间,毫无疑问选择IDEA作为IDE.
testweb是一个简单例子,项目只分成了core和web两个模块.其中core模块是放一些基本的或公共的java类,web模块放的是web Controller,配置,页面.所以最终打包项目时,core应打成一个jar包,而web模块引用(依赖)core模块,对于web的java类也打起一个jar包,这两个jar包最后是放在lib包下面再打成war包.项目的主要结构如下:
testweb
resources
build.gradle
resources
build.gradle
build.gradle
settings.gradle
core主要使用spring+spring data jpa(hibernate实现)+mysql
目录一:新建一个
gradle工程二:修改工程三:新建子
模块四:修改父
模块setting.
gradle五:修改
gradle插件六:测试
利用
gradle进行多
模块架构,用于代码解耦
一:新建一个
gradle工程
以springboot为例
选择
gradle project
可以什么都不选
选择本地
gradle
二:修改工程
删除src文件
修改build.
gradle文件/*
如果在使用Gradle过程中有任何疑问,都建议去官网溜达溜达:https://docs.gradle.org/current/userguide/userguide.html
Gradle是什么
Gradle是一款开源的自动化构建工具,可以灵活的构建任何类型软件(基本上),比如我们日常开发所熟知的:
Java的产物(.JAR)
Android Application的产物(.APK)
Android Library的产物(.AAR)
目前Gradle已经是Android官方首推的自动化构建工具线,也是我们
官方文档:https://docs.gradle.org/current/userguide/declaring_dependencies.html
声明依赖:在研究依赖声明之前,需要定义依赖配置(dependency configuration)的概念。
什么是依赖配置:
每个为gradle 项目声明依赖的依赖关系都使用于一个特定的范围,例如一些依赖项应该用于编译源代码,而其他依赖项只需要在运行时可用即可,Gradle 在配置 (configuration)的帮助下表示依赖的范围,每个配置都可..
我这安装的是6.6.1
C:\Users\herion>
gradle -v
------------------------------------------------------------
Gradle 6.6.1
------------------------------------------------------------
Build time: 2020-08-25 16:29:12 UTC
Revision: f2d1fb54a951d8b11d25748e4711bec8d128d7e3
Kotlin: 1.3.72
Groovy:
Gradle 和 Maven 是两种构建工具,它们都可以帮助开发人员管理和构建项目。但是,它们有一些显著的区别:
1. 基础架构不同:Gradle 基于 Groovy 语言开发,而 Maven 基于 XML。这意味着 Gradle 的构建脚本看起来更像程序代码,而 Maven 的构建脚本看起来更像配置文件。
2. 依赖管理方式不同:Maven 使用预定义的规则来管理依赖关系,而 Gradle 可以自定义依赖管理规则。
3. 扩展性不同:Maven 插件是固定的,而 Gradle 插件是可扩展的。
4. 性能不同:Gradle 的性能优于 Maven,因为它支持并行构建和缓存。
总的来说,Gradle 和 Maven 都是很好的构建工具,但它们适用于不同的场景。Maven 更适合大型项目,因为它有着严格的规范和良好的文档,而 Gradle 则更适合快速迭代和持续交付的项目,因为它具有更高的扩展性和更好的性能。