使用Gradle将档案上传到GitLab Maven存储库

G. *_*ler 5 java gradle maven gitlab

我使用Gradle和Gradle Maven插件将档案上传到Maven Central。这很好。我也想将相同的档案上传到GitLab Maven仓库。上载到此仓库需要使用特殊的HTTP标头值进行身份验证。但是我不知道如何使用Gradle Maven插件来做到这一点。该GitLab文档描述了使用Maven的基础构建过程pom.xmlsettings.xml。我目前所拥有的是:

用Gradle创建的文件:

build/libs
??? wms-1.2.0.jar
??? wms-1.2.0.jar.asc
??? wms-1.2.0-javadoc.jar
??? wms-1.2.0-javadoc.jar.asc
??? wms-1.2.0-sources.jar
??? wms-1.2.0-sources.jar.asc
build/poms
??? pom-default.xml
Run Code Online (Sandbox Code Playgroud)

根据GitLab文档的文件:

pom.xml
settings.xml
Run Code Online (Sandbox Code Playgroud)

当我执行

mvn deploy -s settings.xml
Run Code Online (Sandbox Code Playgroud)

然后pom-default.xml必须“混入” pom.xml并且build/libs/*必须用作存档位置。我怎样才能做到这一点?

Chr*_*iki 5

请注意,maven-publish插件 “现在是出版[Maven的]文物的优先选择”用摇篮(也见顶部的说明页面,你的链接)。maven恕我直言,使用插件执行您需要的操作会比较麻烦,因为它既复杂又没有文档说明。因此,希望您maven-publish在介意插件时回答您的问题时,不要介意。

至于使用特殊HTTP标头值的身份验证,您应该可以通过通过)解决以下问题:

publishing {
    repositories {
        maven {
            url "http://repo.mycompany.com/maven2"
            credentials(HttpHeaderCredentials) {
                name = "Private-Token"
                value = "REPLACE_WITH_YOUR_PERSONAL_ACCESS_TOKEN"
            }
            authentication {
                header(HttpHeaderAuthentication)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我真的想使用旧的maven插件,然后建议从文档的此部分开始研究如何解决身份验证问题。


顺便说一句:我主要是在这里回答了您有关如何使用GitLab进行身份验证的问题。如果您在配置发布时遇到麻烦,那么我建议将其作为一个单独的问题发布,其中包含有关您的设置以及您已经尝试过的内容的更多详细信息。


编辑添加:如果您需要根据某些命令行选项使用不同的标头凭据,则可以将credentials上面的配置更改为以下内容:

credentials(HttpHeaderCredentials) {
    if (project.hasProperty('jobToken')) {
      name = "Job-Token"
      value = project.property('jobToken')
    } else {
      name = "Private-Token"
      value = "REPLACE_WITH_YOUR_PERSONAL_ACCESS_TOKEN"
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,您可以./gradlew -PjobToken=REPLACE_WITH_YOUR_JOB_TOKEN …在GitLab CI作业中运行,而-PjobToken=…在本地工作时省去零件。

  • 我迁移了我的 `build.gradle` 以使用 `maven-publish` 插件,感谢@Chriki,我的工件现在上传到了 gitlab.com。唯一悬而未决的问题是:如何定义两个标头值?当我在命令行中使用 Gradle 时,我必须使用 `Private-Token`,而在 GitLab CI 作业中使用 `Job-Token`。我想用 `HttpHeaderCredentials` 定义两个标头。 (2认同)
  • 我编辑了我的答案,以展示如何在不同环境中使用不同的标头凭据。 (2认同)