当前位置: 首页 > 知识库问答 >
问题:

Maven publish gradle插件跳过该版本

澹台庆
2023-03-14

我有gradle多模块项目配置与kotlin脚本。我想添加发布到maven存储库,我找到了maven发布插件。但它似乎跳过了为每个项目配置的版本:

MyProject/build。格拉德尔。kts

subprojects {
    apply {
        plugin("maven-publish")
    }
    configure<PublishingExtension>() {
        publications {
            repositories { ... }
            create<MavenPublication>("myPublication") {
                from(components.getByName("java"))
                logger.lifecycle("test: ${project.group} ${project.name} ${project.version}")
            }
        }

MyProject/子项目1/构建。格拉德尔。kts

version = "1.0.0-SNAPSHOT"

gradle发布输出:

test: my.project subproject1 unspecified
artifact file does not exist: '.../MyProject/subproject1/build/libs/subproject1.jar'

文件子项目1。jar不存在,但子项目1-1.0.0-SNAPSHOT。jar可以。如何使gradle获得模块的正确版本?

共有1个答案

舒浩邈
2023-03-14

我在使用maven publish插件时发现了类似的问题:

我试图设置存储库URL,这取决于gradle文档中描述的项目版本和这个答案。

但是我发现版本总是解析为(如问题中所述)默认(未设置)值:未指定

所以我猜这些文档示例是针对项目的构建的。gradle而不是一般的gradle脚本。

无论如何,我相信问题是由于gradle脚本中块的执行时间。无法在我想要的地方访问project.version。因此,我最终将一个参数传递给具有-P参数标志的gradlew命令。

Gradle有一个配置和一个执行阶段。

请参阅文档:

>

  • https://docs.gradle.org/current/userguide/build_lifecycle.html
  • https://www.oreilly.com/library/view/gradle-beyond-the/9781449373801/ch03.html

    还有一个明显相似的问题,https://discuss.gradle.org/t/maven-publication-closure-is-evaluated-too-early/19911

    关于您的问题,可能与我描述的相同,或者原因更简单:

    • 查看gradle文件的结构,它似乎与maven publish文档中指定的层次结构不匹配。特别是,repositories{}块应该与publications{}处于同一级别,而不是在其内部

    可能相关:

    • Gradle maven发布插件配置引用了动态创建的Gradle任务
    • Gradle shouldRunAfter不可用于任务

  •  类似资料:
    • 我正在使用maven发布插件进行发布管理。我运行mvn release:prepare on release分支。这样做的结果是,我有一个带有发布版本的git标记,以及带有下一个开发快照版本的发布分支。 现在,我想改变这个过程,以便发布分支总是有正式版本(没有SNAPSHOT版本的碰撞)。 这样做的原因是在生成构建时,我希望发布分支和发布标签具有相同的HEAD提交。 如果我可以跳过碰撞版本的最后一

    • 问题内容: 我有一个文件,其中包含一些应在Go 1.5+上运行的测试。 我可以使用并进行各种比较来获取Go运行时版本。 但是,测试文件import 。该软件包需要from ,但仅在Go 1.5+上可用。 这会在我的CI环境中导致这些错误,从而导致构建失败: 我尝试添加到文件的顶部,但是没有用。 无论如何,我是否可以限制单元测试文件,以便仅在Go 1.5+系统上对其进行构建和测试? 问题答案: 在构

    • 我正在项目中实现dexguard,但生成的应用程序正在崩溃,并出现以下错误: 引起原因: JAVAlang.UnsatifiedLinkError:未找到本机方法:com。杰马尔托。Android根内部的梅德利尼。goMedlJni:(Ljava/lang/String;Ljava/lang/String;)在com。杰马尔托。Android根内部的梅德利尼。goMedlJni(本机方法) 我还解

    • 我有一个文件包:“100.txt”、“1000.txt”、“10000.txt”、“100000.txt”、“1000000.txt”。但当我启动程序时,它会跳过100和1000个txt文件。你能告诉我为什么吗?

    • 问题内容: 我想使用 版本号插件 来格式化BUILD_NUMBER变量。 我在下面的方式进行配置的: 图片 环境变量名称:FORMATTED_BUILD_NUMBER版本号格式字符串:$ {BUILD_NUMBER,XXX} 但是,当我使用FORMATTED_BUILD_NUMBER变量($ {FORMATTED_BUILD_NUMBER})时,它将返回未格式化的内部版本号。 所以我想看到类似的东

    • 我正在尝试使用Maven版本插件将所有子POM升级到父版本,并在父POM中执行所有子模块的构建。Pom文件如下所示 现在,如果我使用Eclipse中的命令在基本POM上运行Maven构建 子模块正在正确构建,但是如果我将base pom版本更新到2.0并使用版本插件命令 版本正在更新,但子模块尚未构建。只有基本pom得到构建。 我是否必须明确指定在某个阶段构建子模块?我错过了什么?。