如何在 Jfrog Artifactory 中部署 100 个 jar

How to deploy 100s of jars in Jfrog Artifactory

我正在将 java 项目构建系统从 Ant 转换为 Maven,实际上有 700 多个依赖 jar 文件躺在一个没有任何版本的文件夹中或包裹信息。

我能够使用它的哈希计算出 400 多个 jar 文件的 Maven 坐标。因此,对于剩余的 300 多个 jar 文件,我正在考虑将其直接上传到 Artifactory 中的本地 repo,然后自动生成 maven 坐标。

据我所知 explored 实现此目的的唯一方法是 deploy/upload 通过 Artifactory UI 手动 每个 jar 文件并 部署为 Maven Artifact 选项启用自动生成坐标,但这是一个非常耗时的过程(我想为 300 多个文件执行此操作)。

还有其他有效的方法吗?

我看到有两种方法可以实现你想要的,不幸的是 none 可用 "out of the box"...

  1. 使用命令行客户端将每个JAR文件上传到Artifactory。 上传的主要命令是:

    jfrog rt上传foo.jarmaven-local-repo

有关详细信息,请参阅 https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory

使用 bash 脚本在 JAR 文件上循环,对于每个文件,将其上传到单独的位置,生成一个简短的 pom(从示例 pom 和一些 sed 来替换 groupId 和 artifactId文件名)并将其上传到 JAR 文件旁边。

  1. 由于 Artifactory 在其 webapp 上提供了此选项,因此创建一个在每个 JAR 文件上循环的 Selenium 客户端,连接到 Artifactory UI,并使用 "Generate default POM" 选项上传每个文件。

https://www.jfrog.com/confluence/display/JFROG/Deploying+Artifacts#DeployingArtifacts-DeployingMavenArtifacts

我相信您已经找到了解决方案,但对于其他必须做类似事情的人,我最终只是使用 gradle 帮我做了。我创建了一个空 gradle 项目和以下 build.gradle。它从指定目录收集所有 jar 并循环遍历它们并为每个创建发布。我们想使用子文件夹结构作为 groupId,因此其中有一些逻辑来格式化它。

buildscript {
    repositories {
      jcenter()
    }
    dependencies {
      classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.21.0"
    }
 }

apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: "com.jfrog.artifactory"

version = '0.2021.0'

ext.thirdPartyLib = fileTree(dir: "$rootDir/../extrajars", include: ['**/*.jar'])
    
    publishing {
        publications {
           thirdPartyLib.each{ jar->
              def fbase = jar.name.minus(".jar")
              "$fbase"(MavenPublication) {
                 artifact jar
                 artifactId fbase

                 //the following was to use the folder structure as the groupId
                 def path = jar.path.minus("\" + jar.name)
                 path = path.replaceAll("\\", ".")
                 path = path.replaceAll("c:/pathtoDirectory", "")

                 groupId = path
              }
           }
        }
     }
     
     artifactory {
        contextUrl = 'http://yourArtifactoryUrl'
        publish {
           repository {
              repoKey='yourRepo'
              username='username'
              password='password'
           }
           defaults {
             thirdPartyLib.each{ jar->
                def fbase = jar.name.minus(".jar")
                publications( fbase )
              }
           }
        }
     }