我正在考虑从maven迁移到gradle,在我们当前的设置中,我们有一个定义所有版本依赖关系的主pom。
项目名称是master-pom,并且包含以下代码段:
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils-version}</version>
</dependency>
.... 然后在文件中我们按照以下几行定义:
<properties>
<commons-beanutils-version>1.9.1</commons-beanutils-version>
</properties>
现在,这就是我到目前为止:
plugins {
id "com.github.johnrengelman.shadow" version "1.2.4"
id "nebula.dependency-recommender" version "3.7.0"
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'nebula.dependency-recommender'
apply plugin: "com.github.johnrengelman.shadow"
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '1.8'
description = """best-service-ever"""
repositories {
mavenLocal()
maven { url 'https://repo.server.com/nexus/content/groups/public'
credentials {
username 'username'
password nexusPassword
}
}
mavenCentral()
jcenter()
}
dependencyRecommendations {
mavenBom module: 'biz.company.name:master-pom:1.0.0-SNAPSHOT'
}
dependencies {
... some dependencies
compile 'biz.company.name:db-schema'
}
此时它将获取名为$ {db-version}的版本并使用build-maven中正确定义的版本。问题是,我需要用特定版本覆盖该版本。
我尝试将值放在gradle.properties中,但是存在问题。
gradle不支持db-version,因为它将其解释为算术运算。我改为尝试将值定义为
db_version = 0.0.1700
这似乎有效,但我如何设置它以覆盖$ db-version值。我想避免在每个工件中明确设置版本:
我的理想情况是允许我简单地覆盖来自bom文件的属性。
之前是否有人遇到此问题?或者有一个解决方法?
答案 0 :(得分:0)
这可能是部分答案。
我确实发现这种模式看似有效,虽然它有点脆,有点过于冗长。我真正想做的就是说。
${common-service-version} = MyVersionNumber (which is defined in gradle.properties)
示例修复:
dependencyRecommendations {
mavenBom module: 'biz.company.name:master-pom:1.0.0-SNAPSHOT'
/* Override properties from mavenBom */
map recommendations: [ 'biz.company.name:shared-common-service': services_common_global_version,
'biz.company.name:services-core': services_common_global_version,
'biz.neustar.ms:test-services-common': services_common_global_version,
'biz.company.name:mip-db-schema': db_version,
'biz.company.name:services-api': services_api_version
]
}
虽然您必须以某种方式重新定义依赖项,但这确实有效。如果有人有更好的模式,请告诉我。
答案 1 :(得分:0)
在这里找到了这个主意:https://dzone.com/articles/specifying-gradle-build,对其进行了一些修改,以使其可以在我当前的gradle版本中使用(不确定是否是问题所在,但无论如何……)
在gradle中指定通用版本基本上可分为两个简单步骤:
创建文件gradle.properties
(如果尚不存在)。在此可以存储任意配置,例如。 jackson.version = 2.10.0
(请不要复制它,请始终在maven Central或类似设备上检查实际的新版本)。
使用通过project.properties
映射定义的属性,该映射在指定依赖关系的双引号模板字符串内。例如:
dependencies {
implementation "com.fasterxml.jackson.core:jackson-core:${project.properties['jackson.version']}"
implementation "com.fasterxml.jackson.core:jackson-databind:${project.properties['jackson.version']}"
//...
}
当然,可以使用其他语法:
dependencies {
implementation(group: "com.fasterxml.jackson.core", name: "jackson-core", version: project.properties['jackson.version'])
implementation group: "com.fasterxml.jackson.core", name: "jackson-databind", version: project.properties['jackson.version']
//...
}