如何在Bitbucket上发布Android库作为Maven工件?

Giu*_*lli 7 android gradle maven

我试图在Bitbucket存储库上发布一个Android库作为Maven工件,从这篇文章开始,这篇文章是在不久前的Android Weekly时事通讯中发布的.本文介绍如何执行发布以及如何链接来自其他Android项目的已发布工件.但是,我甚至没有设法使出版部分正确地工作.

目前,这是build.gradle属于库项目的文件的相关内容:

apply plugin: 'maven'

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://raw.github.com/synergian/wagon-git/releases"
        }
    }
}

configurations {
    deployerJar
}

dependencies {
    deployerJar 'ar.com.synergian:wagon-git:0.2.5'
}
Run Code Online (Sandbox Code Playgroud)

build.gradle项目中库模块文件的相关部分如下:

apply plugin: 'maven'

uploadArchives {
    configuration = rootProject.configurations.archives
    repositories {
        configuration = rootProject.configurations.deployerJar
        mavenDeployer {
            pom.groupId = 'com.example'
            pom.artifactId = 'example-library'
            pom.version = '1.0.0'
            repository(url: "${bitbucketUrl}") {
                authentication(userName: bitbucketUsername, password: bitbucketPassword)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在那里bitbucketUrl,bitbucketUsername并且bitbucketPassword都包含在在gradle.properties在项目的根文件.

所以有什么问题?当我uploadArchives从Android Studio 运行任务时,Gradle显示操作已成功执行.但Bitbucket存储库中没有任何内容.

关于该存储库的结构也没有任何内容,除了在Wagon Git的网站上(称之为文档对我来说似乎有点牵强),其中给出了表单的存储库URL

git:releases://git@github.com:synergian/wagon-git.git
Run Code Online (Sandbox Code Playgroud)

据说它releases代表了存储库的一个分支.我不得不关于结构的那一部分,甚至试图添加一个repository目录(模仿我机器上的本地Maven存储库)但没有运气,而且最重要的是,没有任何线索.

更严重的问题是,当我尝试不同的配置时,我注意到我的存储库URL错误; 但是,永远不会,在执行过程中,Gradle注意到了错误,并通过合适的消息警告或通知了我.这让我怀疑它甚至没有准备上传工件,也没有尝试连接到Bitbucket,但是我无法找到任何指针来理解原因.

最后,发生了一件更奇怪的事情:当我注释掉这条线时:

configuration = rootProject.configurations.deployerJar
Run Code Online (Sandbox Code Playgroud)

在模块build.gradle文件中,我运行uploadArchives任务,Gradle停止并显示错误,说它无法找到合适的货车来管理git协议,这是预期的; 但是,在此过程中,Maven工件出现在我的计算机上的本地存储库中.因此,通过使发布过程崩溃,至少我能够通过Gradle管理类似Maven的依赖项,从其他项目本地使用我的库.

我究竟做错了什么?

RaG*_*aGe 7

  1. 静默失败,打开--info.可能是调试问题的最大障碍.出于某种原因,编写wagon-git部署者的人决定在信息级别写出错误消息.因此gradle无提示失败而不显示任何错误消息.这是我--info打开时收到的消息之一:

    [INFO] [git] fatal: 'git@bitbucket.org/foragerr/mvn-deploy-test.git' does not appear to be a git repository
    
    Run Code Online (Sandbox Code Playgroud)

这显然是一个致命的错误,但就gradle而言,一切都很好,花花公子.一旦您开始阅读这些错误消息,我们就可以取得真正的进展!

  1. git url:这里概述的git URL 以git:.开头.当url开始时,将激活wagon-git deployer git:.可以使用https:url,但maven插件将使用内部部署程序而不是wagon-git.要明确使用wagon-git,url必须从头开始git:

    repository(url: "git:releases://git@bitbucket.org:foragerr/mvn-bitbucket-deploy-test.git")
    
    Run Code Online (Sandbox Code Playgroud)

这里
releases是分支
foragerr的到位桶的用户名
mvn-bitbucket-deploy-test是到位桶回购

  1. 身份验证:wagon-git使用SSH连接到bitbucket.您需要在本端设置git并在远程端设置bitbucket repo以使用SSH.

    • 为git设置SSH(我建议不使用密码,安全性较低,但便于自动部署)
  2. 搞定!使用部署到你的bitbucket repo gradle uploadArchives.在这里查看示例repo.

示例build.gradle:

    group 'net.foragerr.test'
    version '1.2-SNAPSHOT'

    apply plugin: 'java'
    apply plugin: 'maven'

    sourceCompatibility = 1.5

    repositories {
        mavenCentral()
        maven {
            url "https://raw.github.com/synergian/wagon-git/releases"
        }
    }

    configurations {
        deployerJar
    }

    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.11'
        deployerJar "ar.com.synergian:wagon-git:0.2.3"
    }

    uploadArchives {
        repositories.mavenDeployer {
            configuration = configurations.deployerJar;
            repository(url: "git:releases://git@bitbucket.org:foragerr/mvn-bitbucket-deploy-test.git")
        }
    }
Run Code Online (Sandbox Code Playgroud)


Dim*_*cco 6

以下是您需要做的所有事情,您甚至需要使用git协议(此示例显示如何使用HTTPS):

1)在Bitbucket中为您的应用创建应用密码

https://bitbucket.org/account/user/YOUR_USERNAME_HERE/app-passwords
Run Code Online (Sandbox Code Playgroud)

2)在build.gradle中:

apply plugin: 'java'
apply plugin: 'maven'

// artifact --> rootProject.name at settings.gradle <--
// DOWN HERE just add your artifact INFO
group = 'br.com.fora.temer'
version = '0.1-SNAPSHOT'
description = """Diretas Ja"""

dependencies {
    // your dependencies goes here, like this -->
    // compile group: 'br.gov.governo', name: 'golpista', version:'2.0'
}

apply from: 'uploadArchives.gradle' // --> deploy configuration
Run Code Online (Sandbox Code Playgroud)

3)在uploadArchives.gradle里面(你需要创建它):

configurations {
    deployerJars
}

dependencies {
    deployerJars "ar.com.synergian:wagon-git:0.2.5" // plugin
}

uploadArchives {
    configuration = configurations.archives
    repositories.mavenDeployer {
        configuration = configurations.deployerJars
        repository(url: "git:releases://https://YOUR_USERNAME:YOUR_APP_PASSWORD@bitbucket.org/YOUR_COMPANY/repo-release.git")
        snapshotRepository(url: "git:snapshots://https://YOUR_USERNAME:YOUR_APP_PASSWORD@bitbucket.org/YOUR_COMPANY/repo-snapshot.git")
    }
}

allprojects {
    repositories {
        mavenCentral()
        maven { url "https://raw.github.com/synergian/wagon-git/releases"}
    }
}
Run Code Online (Sandbox Code Playgroud)

要部署使用:

gradle uploadArchives
Run Code Online (Sandbox Code Playgroud)

提示:注意条目的顺序......如果你改变它,它将打破一切.