简体   繁体   English

使用Gradle将aar文件发布到Maven Central无法正常工作

[英]Publish an aar file to Maven Central with Gradle not working

Publish an aar file to Maven Central with Gradle still not working: 使用Gradle将aar文件发布到Maven Central仍然无法正常工作:

Ok, let's repeat all the steps I followed to manage to "Publish an aar file to Maven Central with Gradle" (I mainly followed this guide ), just to be sure... 好吧,让我们重复我所遵循的所有步骤来管理“使用Gradle将aar文件发布到Maven Central”(我主要遵循本指南 ),以确保......

1) I use "Android Studio" and I have this simple android lib that I would like to be available on maven: https://github.com/danielemaddaluno/Android-Update-Checker 1)我使用“Android Studio”,我有这个简单的android lib,我希望在maven上可用: https//github.com/danielemaddaluno/Android-Update-Checker

2) In the UpdateCheckerLib folder I have the lib code abovementioned. 2)在UpdateCheckerLib文件夹中,我有上面提到的lib代码。 And applying in the build.gradle of this folder apply plugin: 'com.android.library' i got as output an .aar in the build/outputs/aar/ directory of the module's directory 并在此文件夹的build.gradle中apply plugin: 'com.android.library'我在模块目录的build / outputs / aar /目录中输出.aar

3) My first step was to find an approved repository. 3)我的第一步是找到一个批准的存储库。 I decided to use the Sonatype OSS Repository . 我决定使用Sonatype OSS Repository Here I registered a project opening a new Issue (Create --> Create Issue --> Community Support - Open Source Project Repository Hosting --> New Project) with groupid com.github.danielemaddaluno 在这里,我注册了一个项目,用groupid com.github.danielemaddaluno打开一个新问题(创建 - >创建问题 - >社区支持 - 开源项目资源库托管 - >新项目)

4) So I added in the root of my project a file: maven_push.gradle : 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) I added in the file gradle.properties located in the root the following lines: 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) Inside the root I modified the build.gradle from this: 7)在root中我修改了build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

To this: 对此:

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) I read that for each module or application I want to upload to central, I should: 8)我读到我要上传到中心的每个模块或应用程序,我应该:

  • provide a gradle.propeties 提供gradle.propeties
  • modify build.gradle to add the following line at the end: apply from: '../maven_push.gradle' 修改build.gradle以在最后添加以下行: apply from: '../maven_push.gradle'

So in the UpdateCheckerLib folder I: 所以在UpdateCheckerLib文件夹中我:

  • Added a gradle.properties: 添加了gradle.properties:

     POM_NAME=Android Update Checker POM_ARTIFACT_ID=androidupdatechecker POM_PACKAGING=aar 
  • Modified the build.gradle adding at the bottom of the file the following line: apply from: '../maven_push.gradle' 修改了build.gradle,在文件底部添加以下行: apply from: '../maven_push.gradle'

9) In order to sign my artifacts I did: 9)为了签署我的文物,我做了:

gpg --gen-key
gpg --list-keys  --> get my PubKeyId...
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys PubKeyId

10) I added a file to ~/.gradle/gradle.properties path with a content like this (to get the secret key I used gpg --list-secret-keys ): 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 install gradle in the terminal because "Andoid Studio" teminal didn't recognize gradle... 11) sudo apt-get install gradle在终端因为“Andoid Studio”teminal不认识gradle ...

12) Finally gradle uploadArchives 12)最后gradle uploadArchives

13) I got this error: 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'.

Probably it is simply due a gradle/gradle plugin problem, but I wanted to share all the procedure, just in case it could be helpful for someone else! 可能它仅仅是因为gradle / gradle插件问题,但我想分享所有程序,以防万一它可能对其他人有帮助!

Thanks in advance! 提前致谢!


Publish an aar file to jCenter with Gradle still not working: 使用Gradle仍然无法将aar文件发布到jCenter:

A great thanks goes to JBaruch and his anwer! 非常感谢JBaruch和他的回答! So I'm trying to publish to jCenter instead of Maven Central, as the matter of fact that jcenter() is a superset of mavenCentral(). 所以我试图发布到jCenter而不是Maven Central,事实上jcenter()是mavenCentral()的超集。 Ok let's start again from my github library Android-Update-Checker . 好吧,让我们从我的github库Android-Update-Checker重新开始吧 I tried to follow some of his tips but I'm still stuck... I'm going to write my steps also for the jcenter publishing (hoping that could be useful to someone). 我试着遵循他的一些提示,但我仍然卡住了...我也要为jcenter发布编写我的步骤(希望这对某人有用)。 Maybe I'm missing something... 也许我错过了一些东西......

1) Registered to Bintray with username : danielemaddaluno 1)使用username :danielemaddaluno注册到Bintray

2) Enabling the automatically signing of the uploaded content: 2)启用自动签名上传的内容:
from Bintray profile url --> GPG Signing --> copy paste your public/private keys . 来自Bintray 个人资料网址 - > GPG签名 - >复制粘贴您的public/private keys You can find respectively these two in files public_key_sender.asc/private_key_sender.asc if you execute the following code (the -a or --armor option in gpg is used to generate ASCII-armored key pair): 如果执行以下代码,则可以在文件public_key_sender.asc/private_key_sender.asc分别找到这两个( gpg-a--armor选项用于生成ASCII装甲密钥对):

    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) In the same web page you can configure the auto-signing from: Repositories --> Maven --> Check the "GPG Sign uploaded files automatically" --> Update 2.1)在同一网页中,您可以配置自动签名:存储库 - > Maven - >检查“GPG签名自动上传文件” - >更新

3) In the same web page you can find your Bintray API Key (copy it for a later use) 3)在同一个网页中,您可以找到您的Bintray API Key (将其复制以供以后使用)

4) In the same web page you can configure your Sonatype OSS User (in the previous section of the question I already created a user and a issue) 4)在同一个网页中,您可以配置您的Sonatype OSS User (在问题的前一部分我已经创建了一个用户和一个问题)

5) I added these two lines to the build.gradle in the root 5)我将这两行添加到根目录中的build.gradle

classpath 'com.github.dcendents:android-maven-plugin:1.2'
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1"

So that my own build.gradle in the root looks like: 所以我在root中的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) I modified my build.gradle located inside my project folder, and it looks like: 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) I added to the root local.properties file the following lines: 7)我在root local.properties文件中添加了以下行:

bintray.user=<your bintray username>
bintray.apikey=<your bintray API key>

8) Added to my PATH the default gradle 2.2.1 actually used by "Android Studio", for example: 8)在我的PATH中添加了“Android Studio”实际使用的默认gradle 2.2.1,例如:

PATH=$PATH:/etc/android-studio/gradle/gradle-2.2.1/bin

9) Open "Android Studio" terminal and execute: 9)打开“Android Studio”终端并执行:

gradle bintrayUpload

10) From Bintray --> My Recent Packages --> androidupdatechecker (this is here only after the execution of the previous point 9 ) --> Add to Jcenter --> Check the box --> Group Id = "com.github.danielemaddaluno.androidupdatechecker". 10)来自Bintray - >我最近的包 - > androidupdatechecker(这只是在执行前一点9之后) - >添加到Jcenter - >选中框 - > Group Id =“com.github .danielemaddaluno.androidupdatechecker”。

11) Finally I tryed to follow: Bintray --> My Recent Packages --> androidupdatechecker --> Maven Central --> Sync but I got this error in the "Sync Status" bar on the right of the page: 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.

You can publish your aar to JCenter instead. 您可以将您的aar发布到JCenter。

  1. It's the default in Android Studio . 这是Android Studio中默认设置
  2. You can sync to Central from there in much easier way . 您可以更轻松地从那里同步到Central
  3. It's so much easier to publish there . 那里发布要容易得多
  4. You can use oss.jfrog.org for snapshots . 您可以使用oss.jfrog.org获取快照

我需要将我的aar文件发布到JCenter然后将其与Maven Central同步的每一步都可以在这里阅读: https//github.com/danielemaddaluno/gradle-jcenter-publish

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM