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

如何将私有jar部署到gitlab Maven存储库

公冶光亮
2023-03-14

因此,我在gitlab上有一个项目test-project(https://gitlab.com/group/test-project),这是一个我使用gitlab管道构建和部署的java应用程序。在构建阶段,我正在执行MVN deploy,包test-project.jar被推送到gitlab maven存储库(https://gitlab.com/group/test-project/-/packages)。

现在,我有了一个dependency.jar文件,它在我的pom.xml中作为依赖项列出。我希望将该文件推入与test-project.jar相同的maven存储库。这里的文档中没有任何关于这一点的内容。https://docs.gitlab.com/ee/user/packages/maven_repository

我尝试用maven-deploy-plugin按以下方式推动它:http://maven.apache.org/guides/mini/guide-3d-party-jars-remote.html

我得到一个错误未能部署工件:无法找到工件...这很奇怪,因为我试图推送新的工件,当然,它不存在。

我不确定这是否是GitLab的问题(我怀疑),或者我做错了什么,或者我想要的是不可能的。

编辑

stages:
  - build

maven-repo-push:
  stage: build
  image: maven:3.6.2
  variables:
    GROUP: "com.example"
    ARTIFACT: "myproject"
    VERSION: "1.1.1"
    REPO_PROJECT_ID: "12345678" #gitlab project ID
  script:
    - mvn deploy:deploy-file
      -DgroupId=$GROUP
      -DartifactId=$ARTIFACT
      -Dversion=$VERSION
      -Dpackaging=jar
      -Dfile=$ARTIFACT-$VERSION.jar
      -DgeneratePom=false
      -DpomFile=$ARTIFACT-$VERSION.pom
      -Dfiles=$ARTIFACT-$VERSION-tests.zip
      -Dtypes=zip
      -Dclassifiers=tests
      -DrepositoryId=gitlab-maven
      -Durl=https://gitlab.com/api/v4/projects/$REPO_PROJECT_ID/packages/maven
      -s settings.xml
  when: manual

然而,我的问题仍然是,是否有可能从本地做到这一点

共有1个答案

景鸿才
2023-03-14

您也可以从本地文件系统发布库/JAR,只需设置一个settings.xml

<settings>
  <servers>
    <server>
      <id>gitlab-maven</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Private-Token</name>
            <value>PUT-YOUR-PRIVATE-TOKEN-HERE</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>

或者,如果您希望使用组令牌或部署令牌,请确保更新上面的属性名,这里有https://docs.gitlab.com/ee/user/packages/maven_repository/#authenticate-with-a-deploy-token-in-maven文档

然后使用它在Gitlab的包注册表上发布jar,请记住,您只能发布到项目apiendpoint,但可以使用组endpoint在本地下载/安装工件

mvn -s settings.xml deploy:deploy-file \
-Durl=https://gitlab.com/api/v4/projects/<PUT-PROJECT-ID-HERE>/packages/maven \
-DrepositoryId=REPOSITORY-ID # has to match the settings.xml server:id \
-Dfile=your-lib.jar \
-DgroupId=your.group.id \
-DartifactId=artifact-name \
-Dversion=1.0 \
-Dpackaging=jar \
-DgeneratePom=false 
 类似资料:
  • 我已经构建了Flink的快照版本,并希望将其部署到我的私有nexus存储库中。我尝试在pom中添加以下配置。xml 然后运行“mvn部署”命令。不幸的是,maven仍然试图将Flink的快照部署到官方存储库中: [错误]无法执行目标组织。阿帕奇。专家插件:maven部署插件:2.8.2:project上的部署(默认部署):未能部署工件:无法传输工件组织。阿帕奇。flink:force shadin

  • 例如,xxy-company-api-9.0.jar,这个jar可能需要abc-9.1.jar,commons-lang-1.0.jar等。当POM引用xxy-company工件时,它应该自动获取所有依赖的jar。有可能吗?怎么做? 备注 我们有第三方的JAR,我们没有与这些JAR相关联的源代码项目。我们从供应商、供应商或其他公司获得这些罐子。当我们收到这些罐子时,它会伴随着依赖的罐子等。 问题:

  • 问题内容: 我有一个标记为的docker 映像,并且在dockerhub上有一个名为的私有仓库。 当我推动我的工作时,我最终总是会碰到公共仓库。 具体将我的图片推送到我的私人仓库的确切语法是什么? 问题答案: 您需要先使用正确标记图像: 然后码头工人使用相同的标签推。 例:

  • 我有一个docker图像标记为,我在dockerhub上有一个名为的私人回购 当我推我的时,我最终总是点击公共回购。 将我的图像推送到私人回购协议的确切语法是什么?

  • 我有一个pom构建了一个jar,并使用rpm maven插件将其打包成rpm。jar既用作独立应用程序,也用作其他应用程序的依赖项,因此我需要将这两个构件部署到本地Nexus。我希望将jar部署到标准的maven releases/maven snapshots存储库中,但我希望将rpm部署到同一个Nexus中的另一个存储库中,该存储库仅用于我们的rpm。 我的专业知识相当基础,但我不知道如何做到

  • 我刚刚使用Maven,我需要从一个Ant项目上传一些库。为了开发这个任务,我有一个文件夹,其中包含许多“pom.xml”文件,这些文件引用了我希望使用Maven在Eclipse中添加到我的项目中的jar,还有另一个xml文件,即Ant项目本身。 欢迎所有想法。谢谢