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

时间:2015-11-19 18:51:19

标签: android maven gradle

我试图在Bitbucket存储库上发布一个Android库作为Maven工件,从一段时间以前在Android Weekly时事通讯问题中链接的this article开始。本文介绍如何执行发布以及如何链接来自其他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'
}

项目中库模块的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)
            }
        }
    }
}

其中bitbucketUrlbitbucketUsernamebitbucketPassword包含在项目根目录的gradle.properties文件中。

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

除了Wagon Git的网站(称之为文档对我来说似乎有点牵强)之外,还没有关于该存储库结构的文章,其中,给定存储库URL表格

git:releases://git@github.com:synergian/wagon-git.git

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

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

最后,一个更奇怪的事情发生了:当我注释掉这一行:

configuration = rootProject.configurations.deployerJar

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

我做错了什么?

3 个答案:

答案 0 :(得分: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
    
  2. 这显然是一个致命的错误,但就gradle而言,一切都很好,花花公子。一旦您开始阅读这些错误消息,我们就可以取得真正的进展!

    1. git url:git网址as outlined here,以git:开头。当网址以git:开头时,将激活wagon-git部署程序。可以使用https:网址,但maven插件将使用内部部署程序而不是wagon-git。要明确使用wagon-git,网址必须以git:

      开头
      repository(url: "git:releases://git@bitbucket.org:foragerr/mvn-bitbucket-deploy-test.git")
      
    2. 其中
      releases是分支 foragerr是bitbucket用户名
      mvn-bitbucket-deploy-test是bitbucket repo

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

      2. 全套!使用gradle uploadArchives部署到您的bitbucket仓库。请参阅example repo here

      3. 示例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")
                }
            }
        

答案 1 :(得分:5)

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

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

hideSoftInputFromWindow(IBinder, int, ResultReceiver)

2)在 build.gradle

https://bitbucket.org/account/user/YOUR_USERNAME_HERE/app-passwords

3)在 uploadArchives.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

部署使用:

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"}
    }
}

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

答案 2 :(得分:0)

我知道这个问题已经很久了,但是关于这个话题没有太多的信息,所以我想这是添加一些线索的正确位置。我遇到了同样的问题,似乎没有办法让它发挥作用。所以有一些线索可能会有所帮助:

  1. 如前所述,整个 maven插件旅行车 thingy使用SSH连接到存储库(在我的情况下为Bitbucket)。所以你需要检查一些事情:
    • Bitbuchet了解您的SSH密钥。来自您的个人资料设置(不是存储库设置!) - &gt; SSH密钥并将keygen收到的公开密钥放在那里。在Bitbucket的小'插入键'窗口中有指令帮助你。
    • 您已将keygen生成的私钥添加到您的ssh代理中(键入 ssh-add~ / .ssh / id_rsa 来自Linux,可能还有mac)
    • 还会向您的存储库元素添加凭据:
  2. repository(url: 'git:releases://git@bitbucket.org:gendalf/repo.git'){ authentication(userName: "gendalf", password: "swordfish") }

    1. 该插件不会混淆输出文件。当我开始尝试将我的库上传到存储库时,我在其中有 flavors ,因此插件不知道选择哪个变体并且没有选择(显然)。

      • 据我所知,这些东西不适合口味。因此,如果您在库中发布了您要发布到私有存储库的风味...请考虑摆脱风味。无论如何你可能根本不需要它们。
      • 如果您在尝试 maven 之前尝试了其他发布插件(例如 maven-publish ),请注释掉与其他内容相关的所有脚本或将其删除。由于附加脚本,我的混乱感到困惑。
    2. 考虑尝试使用此https://jeroenmols.com/blog/2016/02/05/wagongit/解决方案。这是我过去最终发布的内容,尽管从刚刚创建的存储库中检出是非常令人困惑的。不要退房。创建存储库并在此之后发布。

    3. 我希望这会有所帮助。