В этом посте я хотел бы описать шаги, необходимые для публикации репозитория aar to maven . Есть другие руководства, которые охватывают эту тему, и некоторая информация, написанная здесь, получена из них, но в этом руководстве я хочу описать процесс шаг за шагом, не раскрывая подробно аспекты gradle, но сосредоточившись на создании ключа подписи и проверяя конечный результат.
меры
Чтобы опубликовать AAR в Maven Central вам нужно:
- Зарегистрируйте аккаунт и создайте новый тикет ( https://issues.sonatype.org )
 - Загрузите (если вы используете OS X) GPGTools ( http://www.gpgtools.org/ )
 - Изменить файлы проекта Gradle
 - Создать ключ подписи
 - Создайте, подпишите и опубликуйте свои файлы в хранилище Staging.
 - Проверьте результат
 
Шаг 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 sonatypeRepositoryUrlif (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.2VERSION_CODE=1GROUP=com.survivingwithandroidPOM_DESCRIPTION=Android Weather LibPOM_URL=https://github.com/survivingwithandroid/WeatherLibPOM_SCM_URL=https://github.com/survivingwithandroid/WeatherLibPOM_SCM_CONNECTION=scm:git@github.com:survivingwithandroid/weatherlib.gitPOM_SCM_DEV_CONNECTION=scm:git@github.com:survivingwithandroid/weatherlib.gitPOM_LICENCE_NAME=The Apache Software License, Version 2.0POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txtPOM_LICENCE_DIST=repoPOM_DEVELOPER_ID=survivingwithandroidPOM_DEVELOPER_NAME=Francesco Azzola | 
  Обратите внимание, что в строке 3 группа должна быть равна значению, используемому при регистрации вашего проекта.  Почти сделано!  Последние два шага — добавление еще gradle.properties файла gradle.properties для каждого модуля, который вы хотите опубликовать, и изменение build.gradle для того же модуля: 
| 
 1 
2 
3 
 | 
POM_NAME=Android Weather LibraryPOM_ARTIFACT_ID=weatherlibPOM_PACKAGING=aar | 
  и добавьте в конце build.gradle эту строку: 
| 
 1 
 | 
apply from: '../maven_push.gradle' | 
Создать ключ подписи
Это важный шаг, потому что ваши файлы должны быть подписаны, прежде чем публиковать их в maven. В OS X вы должны загрузить PGP Tools, которые упростят вашу жизнь. Информация здесь взята из этой ссылки « Как генерировать подписи PGP с помощью Manven ». Первый шаг — создание ключа подписи, запускаемого из командной строки:
gpg –gen-keys
На рисунке ниже показаны все шаги, необходимые для создания ключа:
в конце у вас есть ключ для подписи ваших артефактов. Теперь вы можете перечислить сгенерированные ключи, используя:
gpg –list-keys
и результат показан ниже:
Теперь вам нужно опубликовать свой ключ, чтобы другие разработчики, которые скачивают ваши артефакты, могли проверить подпись:
обратите внимание, что идентификатор ключа должен быть таким же, как показано в списке ключей.
Создайте, подпишите и опубликуйте свой файл в хранилище Staging.
  Теперь у вас есть ключ, и вы можете создавать и подписывать свои артефакты.  Перед тем, как сделать это, вы должны добавить некоторую информацию, чтобы студия Android могла найти правильный ключ для использования.  После этой записи в блоге мы можем добавить файл свойств, называемый gradle.properties с таким содержанием: 
| 
 1 
2 
3 
4 
5 
 | 
signing.keyId=xxxxxxxsigning.password=your_passwordsigning.secretKeyRingFile=file_location nexusUsername=YourSonatypeJiraUsernamenexusPassword=YourSonatypeJiraPassword | 
  В OS X этот файл должен быть добавлен в / Users / your_login.  Обратите внимание, что для заполнения значения secretKeyRingFile вы можете использовать: 
gpg –list-secret-keys
Теперь мы можем запустить задачу gradle с помощью консоли gradle в Android-студии:
% GRADLE_HOME% / bin / gradle uploadArchives
В конце концов, если все работает правильно, мы получим:
Проверьте результат
Последний шаг — проверка окончательного результата, чтобы убедиться, что мы опубликовали наши файлы. Давайте откроем наш браузер и перейдем к:
https://oss.sonatype.org/content/repositories/snapshots/
и начните искать свой проект, следуя структуре вашего пакета (то есть com / SurviveWandroid / WeatherLib) и проверьте, есть ли файлы:
Теперь вы можете проверить репозиторий, создав новый проект в Android-студии, и добавить зависимость к новому файлу, который вы только что опубликовали. После того, как вы создали свой проект, вы должны изменить build.gradle в корневом проекте следующим образом:
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
allprojects {repositories {    mavenCentral()    maven {    }} | 
затем в build.gradle (на уровне модуля) вы добавляете новую зависимость:
| 
 1 
 | 
compile 'com.survivingwithandroid:weatherlib:1.2-SNAPSHOT' | 
… Если все правильно, новый проект скомпилируется.
Ресурс:
- 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
 - http://chris.banes.me/2013/08/27/pushing-aars-to-maven-central/
 - https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
 - https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
 
| Ссылка: | Руководство по публикации aar to maven с помощью gradle от нашего партнера JCG Франческо Аццолы в блоге Surviving w / Android . | 
![Schermata 2014-05-01 алле 21.22.22 [4]](/wp-content/uploads/images/jcg/7d2fe4bd8f7fdd45dfa7131bd3146d99.png)
![Schermata 2014-05-01 алле 21.24.50 [4]](/wp-content/uploads/images/jcg/77f9c479ceb3eb97f64cb5ae46314f50.png)
![Schermata 2014-05-01 алле 21.43.53 [4]](/wp-content/uploads/images/jcg/ea9a6bb716135e134df02ef689569dc0.png)
