如何在gradle中创建特定于公司的父依赖关系



如何创建公司特定的父依赖文件,该文件可用于公司特定的渐变启动的项目

我想在项目中共享的示例库

dependencies {
// logging
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'
implementation group: 'org.slf4j', name: 'log4j-over-slf4j', version: '1.7.30'
// elasticsearch
implementation group: 'org.elasticsearch', name: 'elasticsearch', version: '7.13.2'
implementation group: 'org.elasticsearch.client', name: 'elasticsearch-rest-high-level-client', version: '7.13.2'
}

这取决于父POM的目标是什么?如果它仅适用于合并依赖关系版本,则可以使用版本目录。版本目录是一个依赖项列表,表示为依赖项坐标,用户在构建脚本中声明依赖项时可以从中选择。

settings.gradle

enableFeaturePreview('VERSION_CATALOGS')
dependencyResolutionManagement {
versionCatalogs {
libs {
// logging
alias('slf4j-api').to('org.slf4j:slf4j-api:1.7.30')
alias('log4j-over-slf4j').to('org.slf4j:log4j-over-slf4j:1.7.30')
// elasticsearch
alias('elasticsearch').to('org.elasticsearch:elasticsearch:7.13.2')
alias('elasticsearch-client').to('org.elasticsearch.client:elasticsearch-rest-high-level-client:7.13.2')
alias('elasticsearch-rest').to('org.elasticsearch.client:elasticsearch-rest-client:7.13.2')
}
}
}

build.gradle

dependencies {
// logging
implementation libs.slf4j.api
implementation libs.log4j.over.slf4j
// elasticsearch
implementation libs.elasticsearch
implementation libs.elasticsearch.client
implementation libs.elasticsearch.rest
}

您可以创建一个单独的Gradle项目,该项目为整个公司维护版本目录。然后,该项目将版本目录发布到特定于公司的存储库(如Artifactory(。然后,其他公司项目可以获取并使用已发布的版本目录。

版本目录不仅可以用于正常的项目依赖声明,还可以用于插件依赖声明。

重要提示:截至本文撰写之时,依赖项的中心声明功能仍在酝酿中(在最新的Gradle 7.3.2版本中(。另请参阅Gradle文档部分的警告。

示例项目

以下是两个完整的示例项目:

  • mycompany-catalog是维护和发布版本目录的项目
  • mycompany-app是一些使用已发布版本目录的应用程序

我已经用Gradle 7.3.2测试了这个设置。为了简单和自我控制,我使用了一个本地Maven存储库。

mycompany-catalog项目

您可以按如下方式发布版本目录:
./gradlew publish

另请参阅Gradle文档:

  • version-catalog插件
  • 如何声明版本目录

settings.gradle

enableFeaturePreview('VERSION_CATALOGS')
rootProject.name = 'mycompany-catalog'

build.gradle

plugins {
id 'version-catalog'
id 'maven-publish'
}
// the coordinates of the published catalog
group = 'com.mycompany'
version = 0.42
catalog {
versionCatalog {
// logging
alias('slf4j-api').to('org.slf4j:slf4j-api:1.7.30')
alias('log4j-over-slf4j').to('org.slf4j:log4j-over-slf4j:1.7.30')
// elasticsearch
alias('elasticsearch').to('org.elasticsearch:elasticsearch:7.13.2')
alias('elasticsearch-rest-high-level-client').to(
'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.13.2')
}
}
publishing {
publications {
maven(MavenPublication) {
from components.versionCatalog
}
}
repositories {
// the company-internal repo to which we publish the version catalog
maven {
url = 'file:///tmp/mycompany-repo'
}
}
}

mycompany-app项目

您可以使用类似以下内容来检查这是否按预期工作:
./gradlew dependencies --configuration runtimeClasspath

另请参阅有关导入已发布目录的Gradle文档。

settings.gradle

enableFeaturePreview('VERSION_CATALOGS')
rootProject.name = 'mycompany-app'
dependencyResolutionManagement {
repositories {
// the same company-internal repo (to which we published the version
// catalog in the other project)
maven {
url = 'file:///tmp/mycompany-repo'
}
// a repository from which the external dependencies are fetched
mavenCentral()
}
versionCatalogs {
libs {
// our published catalog
from('com.mycompany:mycompany-catalog:0.42')
}
}
}

build.gradle

plugins {
id 'java'
}
dependencies {
// logging
implementation(libs.slf4j.api)
implementation(libs.log4j.over.slf4j)
// elasticsearch
implementation(libs.elasticsearch)
implementation(libs.elasticsearch.rest.high.level.client)
}
// …

最新更新