与Maven发布一起摇篮:如何自动版本化和将目录中的非渐变罐子发布到Artifactory

 看吧看吧说你你不信 发布于 2023-01-04 14:48

作为从ant迁移到gradle的短期选择,我们希望仅在我们的ant构建的开始和结束时使用gradle,而不是从gradle内部运行ant。

基本上,我们想使用gradle将依赖项提取到目录,然后运行ant build将所有指定的jar放在目录中,然后使用gradle将工件从该目录发布到Artifactory。

这意味着gradle并不会实际构建工件,而是会在目录中找到它们,但是我们仍然希望对它们进行版本控制(因为它们将进入工件)

因此,我们希望使用Gradle动态地版本化和发布目录中的所有文件。

查看gradle文档,似乎Gradle和artifactory-publish插件专注于“要发布的模块”的更多静态定义。我很难让Gradle正确发布目录中文件的动态计数。

我已经尝试了以下内容(压缩),但到目前为止在我的测试中还行不通(因为MavenPublication名称似乎要求使用静态文本)-工件发布位当前未遍历适当的MavenPublications集:

apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'artifactory-publish'

version = new Version( 1, 0, System.env.BUILD_NUMBER )   // set by Jenkins

ext.filesToPublish=['foo.jar', 'bar.ear']

publishing {
   publications {
      def i=0;
      for ( s in filesToPublish ) {
         ++i
         def vname="artifact" + i;
         $vname(MavenPublication) {
            artifact s
            artifactId vname
         }
      }
   }
}

artifactory {
   contextUrl = 'http://.../artifactory'
   publish {
      repository {
         repoKey='...'
         username='...'
         password='...'
      }
      defaults {
         publications('artifact0')
         publications('artifact1')
         publications('artifact2')
      }
   }
   resolve {
      repository {
         repoKey='...'
      }
   }
}

我很感兴趣是否有人想出一种方法来动态发布找到的所有文件到Artifactory的目录。

有没有更好的方法,例如某种定义组件的方法,例如Java插件呢?

我也尝试过动态创建MavenPublication对象,但是无法正常工作。那会是更好的方法吗?

谢谢!

1 个回答
  • 编辑:通过额外的研究和对Groovy的更好理解,我能够做到以下几点-请注意,与以前相比,在变量扩展周围使用了双引号-“ $ fbase”:

    apply plugin: 'java'
    apply plugin: 'maven-publish'
    apply plugin: 'artifactory-publish'
    
    version = new Version( 1, 0, System.env.BUILD_NUMBER )   // set by Jenkins
    
    ext.filesToPublish = []
    ext.dir= new File("pub")
    ext.dir.eachFile( groovy.io.FileType.FILES ) { file ->
       ext.filesToPublish << file
    }
    
    publishing {
       publications {
          for ( f in filesToPublish ) {
             def fbase=f.getName().split("\\.")[0]
             "$fbase"(MavenPublication) {
                artifact f
                artifactId fbase
             }
          }
       }
    }
    
    
    artifactory {
       contextUrl = 'http://.../artifactory'
       publish {
          repository {
             repoKey='...'
             username='...'
             password='...'
          }
          defaults {
             for ( f in filesToPublish ) {
               def fbase=f.getName().split("\\.")[0]
               publications( fbase )
             }
          }
       }
       resolve {
          repository {
             repoKey='...'
          }
       }
    }
    

    2023-01-04 14:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有