【问题标题】:Gradle: How can I resolve the URL to the latest version of the SNAPSHOT version in the Repository?Gradle:如何将 URL 解析为存储库中最新版本的 SNAPSHOT 版本?
【发布时间】:2019-12-23 13:33:34
【问题描述】:

我正在使用 Gradle 构建一个应用程序。我们目前没有版本控制版本。 (它在路线图上。)
Deploying 使用 Jenkins 发布到 UATPROD 中时,
最好自动计算存储库中最新快照版本的 URL,而不必传入文件名。

如果我有,我如何计算最新快照的 URL(到文件名):

  • 工件 ID
  • 版本

?

【问题讨论】:

标签: jenkins gradle jenkins-pipeline


【解决方案1】:

假设您使用的是 nexus,您可以点击 jar url(即包含文件夹)“上方”的 URL,该 URL 将返回一些列出所有快照及其 URL 的 xml。然后,您可以解析 xml 以获取最新的。

还有Nexus REST API 可以让你获得路径

还有 dependency:get 插件,它允许您通过在命令行触发 maven 来下载最新的快照(不需要 pom.xml)。

例如:

mvn dependency:get \
    -DrepoUrl=url \
    -Dartifact=groupId:artifactId:version

【讨论】:

    【解决方案2】:

    感谢@Yuri G 的Link。 以及来自@lance-java 的hint 关于解析 XML 我能够找到解决方案。

    我们正在使用 gradle 进行构建,我在 Jenkins 上运行它,我不知道是否安装了 maven。

    我从链接中的 Gradle 任务开始,然后修改它以读取文件夹中的 maven-metadata.xml 文件。 注意:我们使用的是 Artifactory 而不是 Nexus。

    task getLatestSnapshotURL() {
            doLast
            {
               def url = artifactoryURL + config.binaryRepository.snapshotUrl
    
               def appBaseURL = String.format("%s/%s/%s/%s/", url.toString(),
                                              config.groupId.replace('.', '/'),
                                              config.artifactId, version)
                                      .replace('null','')
    
               def xmlUrl = appBaseURL + "maven-metadata.xml";
               println('metadata.xml URL: ' + xmlUrl)
    
               def ts = ''
               def build = ''
    
               try
               {
                  def downloadXmlURL = new URL(xmlUrl)
                  def fStream = downloadXmlURL.openStream()
                  def slurper = new XmlSlurper().parse(fStream)
                  println(slurper)
                  println(XmlUtil.serialize(slurper))
    
                  def ver = slurper.versioning
                  println("versioning: " + ver)
                  println(XmlUtil.serialize(ver))
    
                  ts = ver.snapshot.timestamp.text()
                  build = ver.snapshot.buildNumber.text()
               }
               catch(Exception ex)
               {
                  println("Unexpected Error getting Snapshot Version "
                         + ex.getMessage() + "\n" + ex.getStackTrace());
               }
    
               println("ts: " + ts)
               println("ts Type: " + ts.getClass())
               println("build: " + build)
               println("build Type: " + build.getClass())
    
               def warUrl = appBaseURL + String.format("%s-%s-%s-%s.war",
                                                       config.artifactId,
                                                       version.replace("-SNAPSHOT", ''),
                                                       ts, build)
               println('war URL: ' + warUrl)
    
               try
               {
                  def jarfile = new URL(warUrl)
                  def inStream = jarfile.openStream();
                  if (inStream != null)
                  {
                     println(String.format("%s:%s:%s", config.groupId,
                                           config.artifactId, version)
                            + " -> " + warUrl)
                     return
                  }
               }
               catch (Exception ignored) { }
            }
         }
    

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 2018-03-28
      • 2016-04-19
      • 2016-12-14
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多