Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Bitbucket上将Android库发布为Maven工件?_Android_Maven_Gradle - Fatal编程技术网

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

如何在Bitbucket上将Android库发布为Maven工件?,android,maven,gradle,Android,Maven,Gradle,我正试图将一个Android库作为Maven工件发布在Bitbucket存储库上,从不久前一期Android每周时事通讯中链接的那个库开始。本文描述了如何执行发布以及如何从另一个Android项目链接已发布的工件。然而,我甚至还没有设法使发布部分正常工作 目前,这是属于库项目的build.gradle文件的相关内容: apply plugin: 'maven' allprojects { repositories { jcenter() maven {

我正试图将一个Android库作为Maven工件发布在Bitbucket存储库上,从不久前一期Android每周时事通讯中链接的那个库开始。本文描述了如何执行发布以及如何从另一个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)
            }
        }
    }
}
其中
bitbucketUrl
bitbucketUsername
bitbucketPassword
包含在项目根目录下的
gradle.properties
文件中

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

除了在VangGit的网站(称之为documentation对我来说似乎有点夸张)上,没有关于该存储库结构的任何内容,在该网站上,给定表单的存储库URL

git:releases://git@github.com:synergian/wagon-git.git
据说,
版本
代表存储库的一个分支。我对结构的这一部分进行了修改,甚至尝试添加一个
存储库
目录(模仿我机器上的本地Maven存储库),但没有运气,最重要的是,没有线索

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

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

configuration = rootProject.configurations.deployerJar
在模块
build.gradle
文件中,我运行了
uploadArchives
任务,gradle停止运行时出现了一个错误,表示它无法找到一辆合适的货车来管理git协议,这是预期的;然而,在这个过程中,Maven工件出现在我机器上的本地存储库中。因此,通过使发布过程崩溃,至少我能够在本地使用依赖于它的其他项目的库,通过对类似Maven的依赖项的Gradle管理

我做错了什么

  • 无声失败,打开
    --info
    。可能是调试问题的最大障碍。出于某种原因,编写waggit部署程序的人员决定在信息级别写出错误消息。因此,gradle会默默地失败,而不会向您显示任何错误消息。这是我打开
    --info
    时收到的消息之一:

    [INFO] [git] fatal: 'git@bitbucket.org/foragerr/mvn-deploy-test.git' does not appear to be a git repository
    
  • 这显然是一个致命的错误,但就格拉德尔而言,一切都很好。一旦你开始阅读这些错误信息,我们就能取得真正的进步

  • git-url:git-url,以git:开头。当url以
    git:
    开头时,将激活VangGit部署程序。可以使用
    https:
    url,但是maven插件将使用内部部署程序而不是git。要显式使用git,url必须以
    git:

    repository(url: "git:releases://git@bitbucket.org:foragerr/mvn-bitbucket-deploy-test.git")
    
  • 其中
    发布
    是分支
    forager
    是bitbucket用户名
    mvn bitbucket部署测试
    是bitbucket repo吗

  • 身份验证:git使用SSH连接到bitbucket。要使用SSH,您需要在本地端设置git,在远程端设置bitbucket repo

    • (我建议不要使用密码,安全性较低,但便于自动化部署)
  • 一切就绪!使用
    gradleuploadarchives
    部署到您的bitbucket 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")
            }
        }
    

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

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

    https://bitbucket.org/account/user/YOUR_USERNAME_HERE/app-passwords
    
    2) 内部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")
            }
        }
    
    要部署,请使用:

    gradle uploadArchives
    

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

    我知道这个问题由来已久,但关于这个话题的信息并不多,所以我想这是添加一些线索的合适地方。我面临着同样的问题,似乎没有办法让它工作。因此,有一些线索可能会有所帮助:

  • 如前所述,整个maven插件使用SSH连接到存储库(在我的例子中是Bitbucket)。因此,您需要检查以下几点:
    • 该Bitbuchet知道您的SSH密钥。请转到您的配置文件设置(非存储库设置!)->SSH密钥,并将keygen接收到的public密钥放在那里。Bitbucket上的“插入密钥”小窗口中提供了帮助您解决问题的说明
    • 您已将keygen生成的私钥添加到ssh代理中(键入ssh add~/.ssh/id\u rsafot Linux,可能还有mac)
    • 还要将凭据添加到存储库元素:
  • 存储库(url:'git:releases://git@org:gendalf/repo.git'){
    身份验证(用户名:“gendalf”,密码:“箭鱼”)}

  • 该插件不会对您的输出文件感到困惑。当我开始尝试将我的库上传到存储库时,我的库中有风格,所以插件不知道选择哪个变体,并且没有选择任何内容(显然)

    • 据我所知,这种东西对口味不起作用。因此,如果您在库中有要发布到私有存储库的风格。。。考虑去除味道。你可能不需要
      gradle uploadArchives