You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在GitLab包注册表中关联存储Maven项目的JAR包与JSON配置文件

关联存储JSON文件与JAR包至GitLab Maven包注册表的可行方案

针对你的需求,这里有几个实用的方案可以帮你把生成的JSON文件和JAR包关联存储在GitLab的Maven包注册表中,每个方案适用于不同的场景:

方案1:使用Maven附加构件功能(原生推荐)

Maven支持将额外的文件作为附加构件和主JAR包一起上传,它们会自动关联到同一个包版本下。你可以借助build-helper-maven-plugin实现这个功能:

  1. 在你的pom.xml<build><plugins>节点中添加以下插件配置(假设你的JSON文件生成在target目录下,名为project-info.json):
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>3.3.0</version>
  <executions>
    <execution>
      <id>attach-json-artifact</id>
      <phase>package</phase>
      <goals>
        <goal>attach-artifact</goal>
      </goals>
      <configuration>
        <artifacts>
          <artifact>
            <file>${project.build.directory}/project-info.json</file>
            <type>json</type>
            <!-- 可选:添加classifier来区分不同的附加构件,比如如果有多个JSON文件的话 -->
            <classifier>metadata</classifier>
          </artifact>
        </artifacts>
      </configuration>
    </execution>
  </executions>
</plugin>
  1. 执行常规的mvn deploy命令即可,此时GitLab会将JAR包和JSON文件作为同一版本下的两个构件存储。后续你可以通过Maven坐标加上classifier(如果设置了)来下载这个JSON文件。

方案2:通过GitLab CI/CD API手动上传

如果需要更灵活的控制,你可以在GitLab CI/CD脚本中,先完成Maven部署上传JAR,再调用GitLab API将JSON文件上传到同一个包版本下:

在你的.gitlab-ci.yml中添加类似以下的部署阶段脚本:

deploy:
  stage: deploy
  script:
    # 先执行Maven部署上传JAR包
    - mvn deploy -s ./settings.xml
    # 调用GitLab API上传JSON文件到同一包版本
    - |
      curl --request POST \
        --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
        --upload-file target/project-info.json \
        "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven/${your-group-id}/${your-artifact-id}/${project.version}/project-info.json"

注意:替换${your-group-id}${your-artifact-id}为你项目实际的Maven groupId和artifactId(需要转为路径格式,比如com.example要写成com/example)。${CI_JOB_TOKEN}是GitLab CI自动提供的权限令牌,无需额外配置。

方案3:将JSON嵌入JAR包内部

如果你的JSON文件是JAR包的配套元数据,不需要单独分发,可以直接把它嵌入到JAR包的META-INF目录中,这样用户下载JAR后就能直接提取:

pom.xml中添加maven-resources-plugin配置:

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <version>3.3.1</version>
  <executions>
    <execution>
      <id>copy-json-to-meta-inf</id>
      <phase>process-resources</phase>
      <goals>
        <goal>copy-resources</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.outputDirectory}/META-INF</outputDirectory>
        <resources>
          <resource>
            <directory>${project.build.directory}</directory>
            <includes>
              <include>project-info.json</include>
            </includes>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>

执行mvn package后,JSON文件会被打包到JAR的META-INF目录下,和JAR完全绑定。


内容的提问来源于stack exchange,提问作者Nakeuh

火山引擎 最新活动