将Gradle版本目录发布到maven local

cclgggtu  于 2023-01-21  发布在  Maven
关注(0)|答案(3)|浏览(198)

我正在尝试将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,带有插件version-catalog,maven-publish。我把我的项目推到了github
任何帮助是非常感谢!

q0qdq0h2

q0qdq0h21#

接下来,问题是发布的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")

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

ssm49v7z

ssm49v7z2#

解决方案:块

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

其他项目现在可以使用引用versionCatalog

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

ljo96ir53#

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

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"

目前,我不知道拥有元数据是否有用。

相关问题