如何创建公司特定的父依赖文件,该文件可用于公司特定的渐变启动的项目
我想在项目中共享的示例库
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)
}
// …