Статьи

Руководство по публикации aar to maven с использованием gradle

В этом посте я хотел бы описать шаги, необходимые для публикации репозитория aar to maven . Есть другие руководства, которые охватывают эту тему, и некоторая информация, написанная здесь, получена из них, но в этом руководстве я хочу описать процесс шаг за шагом, не раскрывая подробно аспекты gradle, но сосредоточившись на создании ключа подписи и проверяя конечный результат.

меры

Чтобы опубликовать AAR в Maven Central вам нужно:

  1. Зарегистрируйте аккаунт и создайте новый тикет ( https://issues.sonatype.org )
  2. Загрузите (если вы используете OS X) GPGTools ( http://www.gpgtools.org/ )
  3. Изменить файлы проекта Gradle
  4. Создать ключ подписи
  5. Создайте, подпишите и опубликуйте свои файлы в хранилище Staging.
  6. Проверьте результат

Шаг 1 очень прост, и вы можете следовать этому официальному руководству. Обратите внимание, что прежде чем вы получите разрешение на загрузку своих файлов, вам обычно приходится ждать два рабочих дня после того, как вы открыли свой билет.

Изменить файлы проекта Gradle

Чтобы опубликовать свой aar, вы должны добавить / изменить некоторые файлы Gradle и создать некоторый файл свойств. Вся информация и файлы здесь скопированы здесь и здесь , и я не буду их объяснять, потому что они уже хорошо объяснены в этих блогах. Первый файл, который вы должны добавить в корень проекта, это maven_push.gradle, который я напишу здесь для простоты:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
apply plugin: 'maven'
apply plugin: 'signing'
 
def sonatypeRepositoryUrl
if (isReleaseBuild()) {
    println 'RELEASE BUILD
    sonatypeRepositoryUrl = hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
} else {
    println 'SNAPSHOT BUILD'
    sonatypeRepositoryUrl = hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
 
}
 
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.allJava
        classpath += project.files(android.plugin.getRuntimeJarList().join(File.pathSeparator))
    }
 
    task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
        classifier = 'javadoc'
        //basename = artifact_id
        from androidJavadocs.destinationDir
    }
 
    task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        //basename = artifact_id
        from android.sourceSets.main.allSource
    }
 
    artifacts {
        //archives packageReleaseJar
        archives androidSourcesJar
        archives androidJavadocsJar
    }
}

а затем вы должны добавить / изменить gradle.properties :

01
02
03
04
05
06
07
08
09
10
11
12
13
VERSION_NAME=1.2
VERSION_CODE=1
GROUP=com.survivingwithandroid
POM_DESCRIPTION=Android Weather Lib
POM_URL=https://github.com/survivingwithandroid/WeatherLib
POM_SCM_URL=https://github.com/survivingwithandroid/WeatherLib
POM_SCM_CONNECTION=scm:git@github.com:survivingwithandroid/weatherlib.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:survivingwithandroid/weatherlib.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=survivingwithandroid
POM_DEVELOPER_NAME=Francesco Azzola

Обратите внимание, что в строке 3 группа должна быть равна значению, используемому при регистрации вашего проекта. Почти сделано! Последние два шага — добавление еще gradle.properties файла gradle.properties для каждого модуля, который вы хотите опубликовать, и изменение build.gradle для того же модуля:

1
2
3
POM_NAME=Android Weather Library
POM_ARTIFACT_ID=weatherlib
POM_PACKAGING=aar

и добавьте в конце build.gradle эту строку:

1
apply from: '../maven_push.gradle'

Создать ключ подписи

Это важный шаг, потому что ваши файлы должны быть подписаны, прежде чем публиковать их в maven. В OS X вы должны загрузить PGP Tools, которые упростят вашу жизнь. Информация здесь взята из этой ссылки « Как генерировать подписи PGP с помощью Manven ». Первый шаг — создание ключа подписи, запускаемого из командной строки:

gpg –gen-keys

На рисунке ниже показаны все шаги, необходимые для создания ключа:

Schermata 2014-05-01 алле 21.22.22 [4]

в конце у вас есть ключ для подписи ваших артефактов. Теперь вы можете перечислить сгенерированные ключи, используя:

gpg –list-keys

и результат показан ниже:

Schermata 2014-05-01 алле 21.24.50 [4]

Теперь вам нужно опубликовать свой ключ, чтобы другие разработчики, которые скачивают ваши артефакты, могли проверить подпись:

Schermata 2014-05-01 алле 21.31.13 [4]

обратите внимание, что идентификатор ключа должен быть таким же, как показано в списке ключей.

Создайте, подпишите и опубликуйте свой файл в хранилище Staging.

Теперь у вас есть ключ, и вы можете создавать и подписывать свои артефакты. Перед тем, как сделать это, вы должны добавить некоторую информацию, чтобы студия Android могла найти правильный ключ для использования. После этой записи в блоге мы можем добавить файл свойств, называемый gradle.properties с таким содержанием:

1
2
3
4
5
signing.keyId=xxxxxxx
signing.password=your_password
signing.secretKeyRingFile=file_location
nexusUsername=YourSonatypeJiraUsername
nexusPassword=YourSonatypeJiraPassword

В OS X этот файл должен быть добавлен в / Users / your_login. Обратите внимание, что для заполнения значения secretKeyRingFile вы можете использовать:

gpg –list-secret-keys

Schermata 2014-05-01 алле 21.43.53 [4]

Теперь мы можем запустить задачу gradle с помощью консоли gradle в Android-студии:

% GRADLE_HOME% / bin / gradle uploadArchives

В конце концов, если все работает правильно, мы получим:

Schermata 2014-05-01 алле 21.46.06 [5]

Проверьте результат

Последний шаг — проверка окончательного результата, чтобы убедиться, что мы опубликовали наши файлы. Давайте откроем наш браузер и перейдем к:

https://oss.sonatype.org/content/repositories/snapshots/

и начните искать свой проект, следуя структуре вашего пакета (то есть com / SurviveWandroid / WeatherLib) и проверьте, есть ли файлы:

Schermata 2014-05-03 алле 19.22.18

Теперь вы можете проверить репозиторий, создав новый проект в Android-студии, и добавить зависимость к новому файлу, который вы только что опубликовали. После того, как вы создали свой проект, вы должны изменить build.gradle в корневом проекте следующим образом:

1
2
3
4
5
6
7
allprojects {
repositories {
    mavenCentral()
    maven {
    }
}

затем в build.gradle (на уровне модуля) вы добавляете новую зависимость:

1
compile 'com.survivingwithandroid:weatherlib:1.2-SNAPSHOT'

… Если все правильно, новый проект скомпилируется.

Ресурс:

  1. http://gmariotti.blogspot.co.uk/2013/09/publish-aar-file-to-maven-central-with.html?utm_source=Android+Weekly&utm_campaign=dfb0bc628f-Android_Weekly_71&utm_medium=email&utm_term=0_4eb677ad19-dfb0bc628f-337257141
  2. http://chris.banes.me/2013/08/27/pushing-aars-to-maven-central/
  3. https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
  4. https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
Ссылка: Руководство по публикации aar to maven с помощью gradle от нашего партнера JCG Франческо Аццолы в блоге Surviving w / Android .