发布Gradle个版本目录到maven本地

Publishing Gradle version catalog to maven local

我正在尝试将 gradle 版本目录发布到 mavenLocal 存储库,以便在多个项目之间共享版本。

TLDR; project on 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。

我正在使用 gradle 版本 7.3.3 和插件版本目录、maven-publish。我将我的项目推送到 github.

非常感谢任何帮助!

解决方案:块

// settings.gradle.kts

versionCatalogs {
    ...
}

仅用于导入已发布版本目录的项目。在定义版本目录的项目中不需要它。 而是从 *.toml 文件构建版本目录:

// build.gradle.kts 

catalog {
    versionCatalog {
        from(files("./gradle/quarkus.versions.toml"))
    }
}

为了使用坐标 ${my.groupId}:${my.artifactId}:${my.version} set

将版本目录发布到 mavenLocal
// 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})
}

按照这个差不多就可以了,问题是发布的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")

有了这些,我就可以使用其他项目发布的版本目录了。