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

重新发布gradle工件

温嘉玉
2023-03-14

我们有一个常春藤知识库,我们正在使用gradle进行依赖关系管理和构建框架。当一个工件被确定为生产就绪时,我们不想再次构建它,所以我们只想通过一个web应用程序“升级”一个现有的工件,该应用程序利用Gradle和工具API为我们完成大部分工作。

目前,我正在将工件复制到本地文件夹并运行另一个重新发布它的build.gradle。我们正在将其发布到现有存储库中的新文件夹和发布存储库中的文件夹。

这样做只是出版常春藤。xml到两个位置。

我猜这是因为文物的位置。

促销服务。groovy公司

void promote(Project project, Build build, String newVersion) {
    def artifactLocation = "/path/to/repository"
    // we are generating this build.gradle and copying it
    def buildFileText = new File('promote.gradle').getText('UTF-8')
    def artifacts = buildDao.findArtifactsByBuild(build)
    def localBuildFolderPath = "/path/to/local/gradle/build"
    def localBuildFolder = new File(localBuildFolderPath)
    localBuildFolder.mkdirs()
    // remove everything currently in the directory
    def buildFiles = localBuildFolder.listFiles()
    buildFiles.each {
        it.delete()
    }
    def newFile = new File("/path/to/local/gradle/build.gradle")
    newFile.mkdirs()
    if (newFile.exists())
        newFile.delete()
    newFile << buildFileText
    artifacts.each { VersionedArtifact it ->
        def folder = new File("${artifactLocation}/${it.module}/${build.branch}/${it.version}")
        def files = folder.listFiles()
        files.each { File from ->
            // remove version number from file name
            String fromName = from.name
            def matcher = fromName =~ /(.*?)-(\d)+\.(\d)+\.(\d)+(\.\d+)?\.(.*)/
            fromName = "${matcher[0][1]}.${matcher[0][6]}"
            File to = new File("${localBuildFolderPath}/${it.module}/${fromName}")
            to.mkdirs()
            if (to.exists()) to.delete()
            // wrapper for Guava's Files.copy()
            FileUtil.copy(from, to)
        }

        ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File("${workingDir}/gradle")).connect()
        connection.newBuild()
            .forTasks("publishReleaseBranchPublicationToIvyRepository", "publishReleaseRepoPublicationToReleaseRepository")
            .withArguments("-PMODULE=${it.module}", "-PVERSION=${it.version}", "-PNEWVERSION=${newVersion}")
            .run()
    }
}

建筑格拉德尔

apply plugin: 'groovy'
apply plugin: 'ivy-publish'

publishing {
  publications {
    releaseBranch(IvyPublication) {
        organisation 'our-organization'
        module MODULE
        revision VERSION
        descriptor.status = 'release'

        configurations { archive {
            } }
    }
    releaseRepo(IvyPublication) {
        organisation 'our-organization'
        module MODULE
        revision NEWVERSION
        descriptor.status = 'release'

        configurations { archive {
        }}
    }
}
repositories {
    ivy {
        name 'ivy'
        url "/path/to/ivy/repo"
        layout "pattern", {
            ivy "[organisation]/[module]/release/[revision]/[module]-[revision].xml"
            artifact "[organisation]/[module]/release/[revision]/[artifact](-[classifier])-[revision].[ext]"
        }
    }
    ivy {
        name 'release'
        url "/path/to/release/repo"
        layout "pattern", {
            ivy "[organisation]/[module]/[revision]/[module]-[revision].xml"
            artifact "[organization]/[module]/[revision]/[artifact](-[classifier])-[revision].[ext]"
        }
    }
  }
}

编辑:更清楚地表明,我们正在编写一个web应用程序来促进工件。

共有1个答案

刘焱
2023-03-14

我不清楚为什么推广是使用工具API实现的,而不是作为常规的Gradle任务或插件。无论如何,IvyPublation既没有使用IvyPublation#from进行配置,也没有使用IvyPublation#工件。因此它们不会有任何工件。

 类似资料:
  • 我有一个多模块项目。而且,我希望能够只做gradle发布,并发布所有模块的所有工件。其中一个问题是,当我包含插件时,我得到了名为“构建”的任务,但在根项目中找不到。 当我运行

  • 此处的文档:http://www.rabbitmq.com/semantics.html 声明当信道关闭时,它被重新分配以进行传递 消息可以使用以requeue参数(Basic.recover、Basic.reject和Basic.NACK)为特征的AMQP方法返回到队列,也可以由于在保留未确认消息时通道关闭而返回到队列。对于2.7.0之前的RabbitMQ版本,这些场景中的任何一个都会导致消息在

  • 我以一个新的gradle用户的身份创建gradle版本,但我过去曾与maven合作过。 我试图重现maven发布插件的动作: 将分支版本更改为发行号(在svn提交) 如您所见,我正在使用: Nexus OSS作为版本控制库 SVN作为scm Gradle(2.8) 我正试图通过这两个插件实现我的目标: > 将分支版本更改为发行号(在svn提交) 创建标签(位于svn) 将分支版本更改为新快照编号(

  • Gradle版本:3.5 我试图发布我的自定义每1k展现的收入神器,但留档是真的不清楚这应该如何做。 这是我们发布的gradle脚本的摘录: 我不确定应该如何在发布闭包中引用每1k展现的收入工件的自定义。使用工件名称('our-software-rpm')不起作用,使用任务名称(rpmArts)也不起作用。那么我该怎么办? 此外,该项目还应用java插件来获取一个ArtifactHandler,该

  • 我有一个非常基本的Gradle构建文件: 这是通过詹金斯执行的,看起来工作正常: 归档工件:[DefaultPublishArtifact_装饰模块-0.0.post0.dev6 n4c62094-py2.7:egg:egg:null] [buildinfo]属性文件位于“/tmp/buildInfo65481565498521”。财产 : artifactoryPublish 正在将生成描述符部

  • 我正在使用gradle maven-publish插件。 gradlew任务 出版-出版本项目制作的所有出版物。 publishMavenWebPublicationToMavenLocal-将Maven出版物“Maven Web”发布到本地Maven存储库。 publishMavenWebPublicationToRemoteArtifactoryRepository-将Maven发布“Mave