有一个包含两个模块的Sping Boot 项目here示例。
其中一个模块的build.gradle
如下所示:
buildscript {
ext { springBootVersion = '2.1.4.RELEASE' }
repositories { mavenCentral() }
dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") }
}
plugins {
id "io.spring.dependency-management" version "1.0.5.RELEASE"
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
bootJar {
baseName = 'gs-multi-module-application'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
repositories { mavenCentral() }
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-web')
compile project(':library')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
另一个模块的build.gradle
如下所示:
buildscript {
repositories { mavenCentral() }
}
plugins { id "io.spring.dependency-management" version "1.0.5.RELEASE" }
ext { springBootVersion = '2.1.4.RELEASE' }
apply plugin: 'java'
apply plugin: 'eclipse'
jar {
baseName = 'gs-multi-module-library'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
repositories { mavenCentral() }
dependencies {
compile('org.springframework.boot:spring-boot-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports { mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}") }
}
springBootVersion = '2.1.4.RELEASE'
在两个模块中都声明了,对于一个2模块的项目来说,这可能不是问题,但是如果我的项目有10个模块,并且我想确保所有模块都依赖于相同版本的Sping Boot ,那么在每个模块中重复这个版本就不方便了,而且容易出错。
类似地,我可能希望将对commons-io
的依赖项添加到这两个模块中,并确保它们始终依赖于相同版本的commons-io
。
如何避免在每个build.gradle
文件中重复版本号?
3条答案
按热度按时间siv3szwd1#
请参阅此Gradle文档:Gradle中的一个好做法是在一个地方配置共享共同特征的子项目,例如在
root project
的构建脚本中(或使用自定义插件)编辑此处建议的解决方案不再被视为Gradle团队的良好实践(上面的链接在最新的Gradle版本文档中甚至没有提到
subproject
块);谢谢你@buggy的提醒。在您从Sping Boot 文档中获得的示例中,此模式可以应用于将Spring引导和其他常见依赖项版本集中在一个位置,但是您还可以更进一步,配置其他常见特性(Java插件配置、存储库等)。
下面是我如何重写Spring示例以使其更简洁:
根项目
库子项目
应用子项目
备注
plugins {}
DSL(不需要旧的buildscript
块)io.spring.dependency-management
的版本,它将从Sping Boot 插件继承ghhaqwfi2#
您可以将
ext{}
区块移至新档案,并透过apply from:
陈述式在项目的build.gradle
档案中指涉它。现在,您只需在一个位置定义依赖关系版本。
通常,一个项目会有一个项目级的
build.gradle
文件,除了特定于模块的build.gradle
文件。但是,您共享的repo缺少项目级的构建脚本。这就是为什么ext{}
块被定义在每个模块的构建脚本中。这可能不是最佳的,我建议查看其他repo,看看不同的开发人员是如何解决这个问题的。ejk8hzay3#
有一个Gradle一致版本插件可以处理此问题:
https://github.com/palantir/gradle-consistent-versions
在根
build.gradle
文件中设置此插件后,您将创建一个versions.props
文件,如下所示,使用文档中的示例。还有一个
versions.locks
文件,它是由./gradlew --write-locks
自动生成的。