【问题标题】:Gradle with maven-publish: how to autoversion and publish non-gradle jars in a directory to ArtifactoryGradle with maven-publish:如何自动版本化并将目录中的非 gradle jar 发布到 Artifactory
【发布时间】:2014-07-08 17:31:28
【问题描述】:

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

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

这意味着 gradle 不会真正构建工件——它会在目录中找到它们,但我们仍然希望它们被版本化(因为它们将进入工件)

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

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

我尝试了以下(精简),但到目前为止它在我的测试中不起作用(因为 MavenPublication 名称似乎需要静态文本)——并且 artifactory-publish 位当前没有循环正确的集合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 对象,但无法使其正常工作。那会是更好的方法吗?

谢谢!

【问题讨论】:

  • 您可能只想查看以太蚂蚁任务来解决依赖关系并将工件从构建部署到存储库。这将使事情变得更简单恕我直言。 github.com/eclipse/aether-ant
  • 谢谢你,曼弗雷德。我去看看。

标签: dynamic gradle publish artifactory


【解决方案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='...'
      }
   }
}

【讨论】:

  • 终于!我希望 gradle 文档有一个示例,展示如何像这个示例一样动态创建出版物名称。干得好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 2015-07-30
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多