发布Gradle版本目录到maven本地

问题描述 投票:0回答:4

我正在尝试将 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.

非常感谢任何帮助!

maven gradle build.gradle version publish
4个回答
2
投票

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

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


0
投票

解决方案:区块

// 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})
}

0
投票

您还可以使用以下方式发布版本目录:

    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"

这个时候,我不知道有那个元数据有没有用


0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.