好的,我们重新说明我遵循的所有步骤,设法“将文件发布到Maven Central with Gradle”(我主要跟随这个guide),只是为了确保…
1)我使用“Android Studio”,我有这个简单的android lib,我想要在maven:https://github.com/danielemaddaluno/Android-Update-Checker上可用
2)在UpdateCheckerLib文件夹中,我有上面提到的lib代码.并在该文件夹的build.gradle中应用插件:’com.android.library’我在模块目录的build / outputs / aar /目录中输出了一个.aar
3)我的第一步是找到一个批准的存储库.我决定使用Sonatype OSS Repository.这里我注册了一个项目,打开一个新的问题(创建 – >创建问题 – >社区支持 – 开源项目存储库托管 – >新项目)与groupid com.github.danielemaddaluno
4)所以我在项目的根目录中添加了一个文件:maven_push.gradle:
- apply plugin: 'maven'
- apply plugin: 'signing'
- def sonatypeRepositoryUrl
- if (isReleaseBuild()) {
- println 'RELEASE BUILD'
- sonatypeRepositoryUrl = hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
- : "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
- } else {
- println 'DEBUG BUILD'
- sonatypeRepositoryUrl = hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
- : "https://oss.sonatype.org/content/repositories/snapshots/"
- }
- def getRepositoryUsername() {
- return hasProperty('nexusUsername') ? nexusUsername : ""
- }
- def getRepositoryPassword() {
- return hasProperty('nexusPassword') ? nexusPassword : ""
- }
- afterEvaluate { project ->
- uploadArchives {
- repositories {
- mavenDeployer {
- beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
- pom.artifactId = POM_ARTIFACT_ID
- repository(url: sonatypeRepositoryUrl) {
- authentication(userName: getRepositoryUsername(),password: getRepositoryPassword())
- }
- pom.project {
- name POM_NAME
- packaging POM_PACKAGING
- description POM_DESCRIPTION
- url POM_URL
- scm {
- url POM_SCM_URL
- connection POM_SCM_CONNECTION
- developerConnection POM_SCM_DEV_CONNECTION
- }
- licenses {
- license {
- name POM_LICENCE_NAME
- url POM_LICENCE_URL
- distribution POM_LICENCE_DIST
- }
- }
- developers {
- developer {
- id POM_DEVELOPER_ID
- name POM_DEVELOPER_NAME
- }
- }
- }
- }
- }
- }
- signing {
- required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
- sign configurations.archives
- }
- task androidJavadocs(type: Javadoc) {
- source = android.sourceSets.main.java.sourceFiles
- }
- task androidJavadocsJar(type: Jar) {
- classifier = 'javadoc'
- //basename = artifact_id
- from androidJavadocs.destinationDir
- }
- task androidSourcesJar(type: Jar) {
- classifier = 'sources'
- //basename = artifact_id
- from android.sourceSets.main.java.sourceFiles
- }
- artifacts {
- //archives packageReleaseJar
- archives androidSourcesJar
- archives androidJavadocsJar
- }
- }
6)我在文件gradle.properties中添加了以下几行:
- VERSION_NAME=1.0.1-SNAPSHOT
- VERSION_CODE=2
- GROUP=com.github.danielemaddaluno
- POM_DESCRIPTION=Android Update Checker
- POM_URL=https://github.com/danielemaddaluno/Android-Update-Checker
- POM_SCM_URL=https://github.com/danielemaddaluno/Android-Update-Checker
- POM_SCM_CONNECTION=scm:git@github.com:danielemaddaluno/Android-Update-Checker.git
- POM_SCM_DEV_CONNECTION=scm:git@github.com:danielemaddaluno/Android-Update-Checker.git
- POM_LICENCE_NAME=The Apache Software License,Version 2.0
- POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
- POM_LICENCE_DIST=repo
- POM_DEVELOPER_ID=danielemaddaluno
- POM_DEVELOPER_NAME=Daniele Maddaluno
7)在根目录下,我修改了build.gradle:
- buildscript {
- repositories {
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:1.0.0'
- }
- }
- allprojects {
- repositories {
- jcenter()
- }
- }
为此:
- buildscript {
- repositories {
- mavenCentral()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:1.0.0'
- }
- }
- def isReleaseBuild() {
- return version.contains("SNAPSHOT") == false
- }
- allprojects {
- version = VERSION_NAME
- group = GROUP
- repositories {
- mavenCentral()
- }
- }
- apply plugin: 'android-reporting'
8)我看到,对于每个要上传到中央的模块或应用程序,我应该:
>提供一个gradle.propeties
>修改build.gradle在末尾添加以下行:
适用于:’../maven_push.gradle’
所以在UpdateCheckerLib文件夹中我:
>添加了一个gradle.properties:
- POM_NAME=Android Update Checker
- POM_ARTIFACT_ID=androidupdatechecker
- POM_PACKAGING=aar
>修改build.gradle在文件底部添加以下行:apply from:’../maven_push.gradle’
9)为了签署我的文物,我做了:
- gpg --gen-key
- gpg --list-keys --> get my PubKeyId...
- gpg --keyserver hkp://pool.sks-keyservers.net --send-keys PubKeyId
10)我添加了一个文件到〜/ .gradle / gradle.properties路径与这样的内容(获得秘密密钥我使用gpg –list-secret-keys):
- signing.keyId=xxxxxxx
- signing.password=YourPublicKeyPassword
- signing.secretKeyRingFile=~/.gnupg/secring.gpg
- nexusUsername=YourSonatypeJiraUsername
- nexusPassword=YourSonatypeJiraPassword
11)sudo apt-get安装毕业生在终端,因为“Andoid Studio”teminal没有认识到毕业…
12)终于毕业了上传档案
13)我得到这个错误:
- FAILURE: Build Failed with an exception.
- * Where:
- Build file '/home/madx/Documents/Workspace/Android-Update-Checker/UpdateCheckerLib/build.gradle' line: 1
- * What went wrong:
- A problem occurred evaluating project ':UpdateCheckerLib'.
- > Could not create plugin of type 'LibraryPlugin'.
可能这只是一个毕业/毕业插件问题,但我想分享所有的程序,以防万一它可以有助于别人!
提前致谢!
发布一个aar文件到jCenter与Gradle仍然不工作:
非常感谢JBaruch和他的工作人员!所以我试图发布到jCenter而不是Maven Central,事实上jcenter()是mavenCentral()的超集.
好的,让我们从我的github库Android-Update-Checker重新开始.
我试图跟随他的一些提示,但我仍然卡住了
我也要为自己的发布写脚步(希望对某人有用).也许我错过了一些…
1)注册到Bintray用户名:danielemaddaluno
2)启用上传内容的自动签名:
来自Bintray profile url – > GPG签名 – >复制粘贴您的公钥/私钥.您可以在文件public_key_sender.asc / private_key_sender.asc中分别找到这两个
如果您执行以下代码(用于生成ASCII装甲密钥对的gpgis中的-a或–armor选项):
- gpg --gen-key
- gpg -a --export daniele.maddaluno@gmail.com > public_key_sender.asc
- gpg -a --export-secret-key daniele.maddaluno@gmail.com > private_key_sender.asc
2.1)在同一个web page中,您可以从以下位置配置自动签名:存储库 – > Maven – >检查“GPG自动上传的文件” – >更新
3)在同一个web page中,您可以找到您的Bintray API密钥(复制以供以后使用)
4)在同一个web page中,您可以配置您的Sonatype OSS用户(在我已经创建用户和问题的问题的上一部分中)
5)我将这两行添加到根中的build.gradle
- classpath 'com.github.dcendents:android-maven-plugin:1.2'
- classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1"
所以我自己的build.gradle在根看起来像:
- buildscript {
- repositories {
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:1.0.0'
- classpath 'com.github.dcendents:android-maven-plugin:1.2'
- classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1"
- }
- }
- allprojects {
- repositories {
- jcenter()
- }
- }
6)我修改了我的build.gradle位于我的项目文件夹,它看起来像:
- apply plugin: 'com.android.library'
- apply plugin: 'com.github.dcendents.android-maven'
- apply plugin: "com.jfrog.bintray"
- // This is the library version used when deploying the artifact
- version = "1.0.0"
- android {
- compileSdkVersion 21
- buildToolsVersion "21.1.2"
- defaultConfig {
- //applicationId "com.madx.updatechecker.lib"
- minSdkVersion 8
- targetSdkVersion 21
- versionCode 1
- versionName "1.0.0"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
- }
- }
- }
- dependencies {
- compile fileTree(dir: 'libs',include: ['*.jar'])
- compile 'org.jsoup:jsoup:1.8.1'
- }
- def siteUrl = 'https://github.com/danielemaddaluno/Android-Update-Checker' // Homepage URL of the library
- def gitUrl = 'https://github.com/danielemaddaluno/Android-Update-Checker.git' // Git repository URL
- group = "com.github.danielemaddaluno.androidupdatechecker" // Maven Group ID for the artifact
- install {
- repositories.mavenInstaller {
- // This generates POM.xml with proper parameters
- pom {
- project {
- packaging 'aar'
- // Add your description here
- name 'The project aims to provide a reusable instrument to check asynchronously if exists any newer released update of your app on the Store.'
- url siteUrl
- // Set your license
- licenses {
- license {
- name 'The Apache Software License,Version 2.0'
- url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
- }
- }
- developers {
- developer {
- id 'danielemaddaluno'
- name 'Daniele Maddaluno'
- email 'daniele.maddaluno@gmail.com'
- }
- }
- scm {
- connection gitUrl
- developerConnection gitUrl
- url siteUrl
- }
- }
- }
- }
- }
- task sourcesJar(type: Jar) {
- from android.sourceSets.main.java.srcDirs
- classifier = 'sources'
- }
- task javadoc(type: Javadoc) {
- source = android.sourceSets.main.java.srcDirs
- classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
- }
- task javadocJar(type: Jar,dependsOn: javadoc) {
- classifier = 'javadoc'
- from javadoc.destinationDir
- }
- artifacts {
- archives javadocJar
- archives sourcesJar
- }
- Properties properties = new Properties()
- properties.load(project.rootProject.file('local.properties').newDataInputStream())
- bintray {
- user = properties.getProperty("bintray.user")
- key = properties.getProperty("bintray.apikey")
- configurations = ['archives']
- pkg {
- repo = "maven"
- name = "androidupdatechecker"
- websiteUrl = siteUrl
- vcsUrl = gitUrl
- licenses = ["Apache-2.0"]
- publish = true
- }
- }
7)我添加到root local.properties根文件中,如下所示:
- bintray.user=<your bintray username>
- bintray.apikey=<your bintray API key>
8)添加到我的PATH中的默认渐变2.2.1实际使用的“Android Studio”,例如:
- PATH=$PATH:/etc/android-studio/gradle/gradle-2.2.1/bin
9)打开“Android Studio”终端并执行:
- gradle bintrayUpload
10)从Bintray – >我最近的包 – > androidupdatechecker(这只是在执行前面的点9之后) – >添加到Jcenter – >勾选框 – >组ID =“com.github.danielemaddaluno.androidupdatechecker”.
11)最后我试着跟随:Bintray – >我最近的包 – > androidupdatechecker – > Maven Central – >同步,但是我在页面右侧的“同步状态”栏中收到此错误:
- Last Synced: Never
- Last Sync Status: Validation Failed
- Last Sync Errors:
- Missing Signature:
- '/com/github/danielemaddaluno/androidupdatechecker/UpdateCheckerLib/1.0.0/UpdateCheckerLib-1.0.0-javadoc.jar.asc'
- does not exist for 'UpdateCheckerLib-1.0.0-javadoc.jar'.
- Missing Signature:
- '/com/github/danielemaddaluno/androidupdatechecker/UpdateCheckerLib/1.0.0/UpdateCheckerLib-1.0.0.aar.asc'
- does not exist for 'UpdateCheckerLib-1.0.0.aar'.
- Missing Signature:
- '/com/github/danielemaddaluno/androidupdatechecker/UpdateCheckerLib/1.0.0/UpdateCheckerLib-1.0.0-sources.jar.asc'
- does not exist for 'UpdateCheckerLib-1.0.0-sources.jar'.
- Missing Signature:
- '/com/github/danielemaddaluno/androidupdatechecker/UpdateCheckerLib/1.0.0/UpdateCheckerLib-1.0.0.pom.asc'
- does not exist for 'UpdateCheckerLib-1.0.0.pom'.
- Invalid POM: /com/github/danielemaddaluno/androidupdatechecker/UpdateCheckerLib/1.0.0/UpdateCheckerLib-1.0.0.pom:
- Project description missing Dropping existing partial staging repository.
解决方法
这是default in Android Studio.
>你可以sync to Central from there in much easier way.
>是so much easier to publish there.
>您可以使用oss.jfrog.org for snapshots.