我正试图在Bitbucket存储库上发布一个Android库作为Maven工件,从this article开始,这个问题在不久前的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'
}
项目中库模块的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存储库中没有任何内容。
关于该存储库的结构也没有任何内容,除了在Wagon Git的网站上(称之为文档对我来说似乎有点牵强),其中给出了表单的存储库URL
git:releases://[email protected]:synergian/wagon-git.git
据说releases
代表了存储库的一个分支。我不得不对结构有所了解,甚至试图添加一个repository
目录(模仿我机器上的本地Maven存储库),但没有运气,最重要的是,没有任何线索。
更严重的问题是,当我尝试不同的配置时,我注意到我的存储库URL错误;但是,永远不会,在执行过程中,Gradle注意到了错误,并通过合适的消息警告或通知了我。这让我怀疑它甚至没有准备上传工件,也没有尝试连接到Bitbucket,但是我无法找到任何指针来理解原因。
最后,发生了一件更奇怪的事情:当我注释掉这条线时:
configuration = rootProject.configurations.deployerJar
在模块build.gradle
文件中,我运行uploadArchives
任务,Gradle停止并显示错误,说它无法找到合适的马车来管理git协议,这是预期的;但是,在此过程中,Maven工件出现在我的计算机上的本地存储库中。因此,通过使发布过程崩溃,至少我能够通过Gradle管理类似Maven的依赖项,从其他项目本地使用我的库。
我究竟做错了什么?
--info
。可能是调试问题的最大障碍。出于某种原因,编写wagon-git部署者的人决定在信息级别写出错误消息。因此gradle无提示失败而不显示任何错误消息。这是我在--info
打开时收到的消息之一:
[INFO] [git] fatal: '[email protected]/foragerr/mvn-deploy-test.git' does not appear to be a git repository
这显然是一个致命的错误,但就gradle而言,一切都很好,花花公子。一旦您开始阅读这些错误消息,我们就可以取得真正的进展!
git:
开头。当网址以git:
开头时,wagon-git deployer被激活。可以使用https:
网址,但maven插件将使用内部部署程序而不是wagon-git。要明确使用wagon-git,网址必须以git:
开头
repository(url: "git:releases://[email protected]:foragerr/mvn-bitbucket-deploy-test.git")
哪里
releases
是分支机构
foragerr
是bitbucket用户名
mvn-bitbucket-deploy-test
是bitbucket repo
gradle uploadArchives
部署到您的bitbucket仓库。见example repo here。示例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://[email protected]:foragerr/mvn-bitbucket-deploy-test.git")
}
}
以下是您需要做的所有事情,您甚至需要使用git协议(此示例显示如何使用HTTPS):
1)在Bitbucket中为您的应用创建应用密码
https://bitbucket.org/account/user/YOUR_USERNAME_HERE/app-passwords
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
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:[email protected]/YOUR_COMPANY/repo-release.git")
snapshotRepository(url: "git:snapshots://https://YOUR_USERNAME:[email protected]/YOUR_COMPANY/repo-snapshot.git")
}
}
allprojects {
repositories {
mavenCentral()
maven { url "https://raw.github.com/synergian/wagon-git/releases"}
}
}
要部署使用:
gradle uploadArchives
提示:注意条目的顺序......如果你改变它,它将打破一切。
我知道这个问题已经过时了,但是关于这个主题没有太多的信息,所以我想这是添加一些线索的正确位置。我遇到了同样的问题,似乎没有办法让它发挥作用。所以有一些线索可能会有所帮助:
repository(url: 'git:releases://[email protected]:gendalf/repo.git'){
authentication(userName: "gendalf", password: "swordfish") }
我希望这有帮助。