如何在Bitbucket上将Android库发布为Maven工件?
我正试图将一个Android库作为Maven工件发布在Bitbucket存储库上,从不久前一期Android每周时事通讯中链接的那个库开始。本文描述了如何执行发布以及如何从另一个Android项目链接已发布的工件。然而,我甚至还没有设法使发布部分正常工作 目前,这是属于库项目的如何在Bitbucket上将Android库发布为Maven工件?,android,maven,gradle,Android,Maven,Gradle,我正试图将一个Android库作为Maven工件发布在Bitbucket存储库上,从不久前一期Android每周时事通讯中链接的那个库开始。本文描述了如何执行发布以及如何从另一个Android项目链接已发布的工件。然而,我甚至还没有设法使发布部分正常工作 目前,这是属于库项目的build.gradle文件的相关内容: apply plugin: 'maven' allprojects { repositories { jcenter() maven {
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:
开头时,将激活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吗
- (我建议不要使用密码,安全性较低,但便于自动化部署)
gradleuploadarchives
部署到您的bitbucket repo。看 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
提示:注意条目的顺序。。。如果你改变它,它会破坏一切 我知道这个问题由来已久,但关于这个话题的信息并不多,所以我想这是添加一些线索的合适地方。我面临着同样的问题,似乎没有办法让它工作。因此,有一些线索可能会有所帮助:
- 该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