当前位置: 首页 > 知识库问答 >
问题:

使用maven发布Gradle:如何自动版本并将非gradle jars发布到artiFactory目录中

赫连瑾瑜
2023-03-14

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

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

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

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

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

我已经尝试了以下方法(压缩),但在我的测试中到目前为止还不起作用(因为MavenPublation名称似乎需要静态文本)——并且artiface-发布位目前不会在正确的MavenPublations集上循环:

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插件那样定义组件?

我还尝试动态创建MavenPublation对象,但无法正常工作。这是一种更好的方法吗?

谢啦!

共有1个答案

蒋哲
2023-03-14

编辑:通过进一步的研究和对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='...'
      }
   }
}
 类似资料:
  • null 当我运行./gradlew artifactoryPublish时,它将记录: 尝试从其他生成加载插件。Gradle: 带设置。分级: 导致此错误: 我希望在运行ArtiFactoryPublish时,将publishToMavenLocal创建的所有工件发布到Artifactory。如果artifactoryPublish是错误的工具,我愿意接受它的替代方法。 如何将Gradle插件发

  • 我想使用将我的jar上传到Maven中央存储库,并在其他项目中作为依赖项使用它。我遵循了这个不错的教程,结果我的JAR被上传到Sonatype Nexus(见下面的屏幕截图)。 我的jar的0.1版本可用;线路 在我的从属项目的文件。我通过点击屏幕截图中的关闭和释放按钮发布了0.1版本。之后,我评论了我在这里创建的Jira票据,并被告知中央同步将每两小时运行一次。 我的理解是,如果我现在想发布我的

  • 如何使用Gradle版本1.12将本地(.war.jar)文件发布(部署)到Artifactory? 亲爱的所有 我很难做到这一点,因为Gradle的旧版本我无法更改,因为规范,如果有人能帮我处理这段代码,我将非常感激。 到目前为止我所做的: 应用插件:“com.jfrog.artifactory上传”应用插件:“maven发布”应用插件:“maven”应用插件:“分发”

  • 我有以下多项目分级建设: 3个子项目分级文件中的每一个目前都非常简单: 以下是我想要达到的目标: 当我从父目录运行时,我希望所有三个子项目都使用0.1.5版本生成;因此,、和。但是,当前我的构建已经执行此操作... 如果客户端和共享JAR成功构建,我还希望将它们发布到我的私有Artifactory repo中。(我不希望发布服务器JAR)。 我的问题是:如何将这个片段添加到我的项目中,这样从父目录

  • 我正在尝试在 Jenkins 中配置以下工作流模式: 构建战争文件 我似乎错过了一些东西。应用程序的组件(jar 文件等)似乎在目标版本/快照目录中很好地部署到 Artifactory 中。然而,最终的WAR神器似乎并没有存储在Artifactory中,尽管Jenkins清楚地指出该神器是成功构建的。 我使用的是标准目标:全新安装。我也尝试过(没有改变):全新安装重新打包 我安装了Jenkins的

  • 问题内容: 我正在开发两个相关的项目。其中一个是“助手”,另一个是“主”。我不断地更新“主要”,但是我有时也会更新“助手”。之后,我在gradle的maven插件中运行目标,并在本地maven存储库中获取jar。之后,我在“主要”项目中进行了gradle更新,并链接了更新的jar。 有两个问题。 1)如果仍然使用maven插件,那么如何将源代码也发布到本地Maven存储库中呢? 2)我可以在没有m