我正在尝试将 gradle 版本目录发布到 mavenLocal 存储库,以便在多个项目之间共享版本。
TLDR; github 上的项目 发布版本目录不起作用。
我正在按照官方docs中的描述进行操作。
在我的 ./gradle 文件夹中,我有一个 *.toml 文件,它描述了我的版本目录。
导入成功通过
// settings.gradle.kts
rootProject.name = "gradle-version-catalogs"
enableFeaturePreview("VERSION_CATALOGS")
dependencyResolutionManagement {
versionCatalogs {
create("quarkus") {
from(files("gradle/quarkus.versions.toml"))
}
}
}
构建脚本如下所示:
// build.gradle.kts
group = "de.lj"
version = "1.0-SNAPSHOT"
plugins {
`version-catalog`
`maven-publish`
}
publishing {
publications {
create<MavenPublication>("quarkus") {
println("Version Catalogs:")
versionCatalogs.catalogNames.forEach { println(it) }
from(components["versionCatalog"])
}
}
}
运行 gradle 发布任务会导致工件 de.lj.gradle.version-catalogs:1.0-SNAPSHOT 被发布到我的 mavenLocal 存储库。但是没有我想创建的 de.lj.quarkus。
我正在使用带有插件版本目录、maven 发布的 gradle 版本 7.3.3。我把我的项目推到了github.
非常感谢任何帮助!
按照这个差不多就可以了,问题是发布的TOML文件是空的。 我设法让它工作,在“build.gradle.kts”中添加以下代码:
catalog {
versionCatalog {
from(files("./gradle/quarkus.versions.toml"))
}
}
所以整个文件结束为:
/// build.gradle.kts
group = "de.lj"
version = "1.0-SNAPSHOT"
plugins {
`version-catalog`
`maven-publish`
}
catalog {
versionCatalog {
from(files("gradle/quarkus.versions.toml"))
}
}
publishing {
publications {
create<MavenPublication>("quarkus") {
from(components["versionCatalog"])
}
}
}
此外,我们可以删除“settings.gradle.kts”中的这段代码:
dependencyResolutionManagement {
versionCatalogs {
create("quarkus") {
from(files("gradle/quarkus.versions.toml"))
}
}
}
导致:
/// settings.gradle.kts
rootProject.name = "gradle-version-catalogs"
enableFeaturePreview("VERSION_CATALOGS")
有了这些,我就可以使用其他项目发布的版本目录了。
解决方案:区块
// settings.gradle.kts
versionCatalogs {
...
}
仅用于导入已发布版本目录的项目。在定义版本目录的项目中不需要它。 而是从 *.toml 文件构建版本目录:
// build.gradle.kts
catalog {
versionCatalog {
from(files("./gradle/quarkus.versions.toml"))
}
}
为了将版本目录发布到 mavenLocal 并设置坐标 ${my.groupId}:${my.artifactId}:${my.version}
// settings.gradle.kts
rootProject.name = "${my.groupId}"
// build.gradle.kts
group = "${my.groupId}"
version = "${my.version}"
其他项目现在可以参考版本目录
// settings.gradle.kts
rootProject.name = "version-catalog-import"
enableFeaturePreview("VERSION_CATALOGS")
dependencyResolutionManagement {
repositories {
mavenLocal()
}
versionCatalogs {
create("${my.reference}").from("${my.groupId}:${my.artifactId}:${my.version}")
}
}
// build.gradles.kts
plugins {
`kotlin-dsl`
`version-catalog`
}
dependencies {
implementation(${my.reference})
}
您还可以使用以下方式发布版本目录:
create<MavenPublication>("VersionCatalog") {
groupId = "com.quarkus"
artifactId = "com.quarkus.version.catalog"
version = libs.versions.toml.get()
artifact("../gradle/quarkus.versions.toml")
}
在上面,版本目录本身包含了TOML文件的版本。直接发布工件而不是使用组件 versionCatalog 的唯一区别是,当您将其作为组件发布时,TOML 文件会在原始工件前面添加以下内容:
#
# This file has been generated by Gradle and is intended to be consumed by Gradle
#
[metadata]
format.version = "1.1"
这个时候,我不知道有那个元数据有没有用
plugins {
`version-catalog`
`maven-publish`
}
catalog { versionCatalog { from(files("../gradle/libs.versions.toml")) } }
publishing {
publications {
create<MavenPublication>("maven") {
group = "com.k4dima"
artifactId = "version-catalog"
version = "0.0.1"
from(components["versionCatalog"])
}
}
}
./gradlew publishToMavenLocal