Указание развернутого имени файла для артефакта AAR в проекте библиотеки Android

Я пытаюсь настроить проект библиотеки Android для развертывания нескольких артефактов в локально размещенном хранилище Maven. Я получил достаточно далеко, так что у обоих артефактов есть свой собственный POM, и он правильно развертывается в репо со следующим скриптом:

android { // Publish both debug and release publishNonDefault true } uploadArchives { repositories.mavenDeployer { def majorVersion = 1 def minorVersion = 1 def buildVersion = project.properties.get('RELEASE', '0').toInteger() addFilter('release') { artifact, file -> file.name.contains('release') } addFilter('debug') { artifact, file -> file.name.contains('debug') } activePomFilters.each { filter -> pom(filter.name) { groupId = 'com.redacted' artifactId = 'redacted' packaging = 'aar' version = "${majorVersion}.${minorVersion}.${buildVersion}" if (!project.hasProperty('RELEASE')) { version += "-SNAPSHOT" } if (filter.name == 'debug') { artifactId += '-debug' } } } } } 

Ожидаемая доставка:

 com/ redacted/ redacted/ 1.1.0-SNAPSHOT/ redacted-debug/ 1.1.0-SNAPSHOT/ 

Что происходит так, как ожидалось, но, кажется, публикует артефакты с дополнительным суффиксом (который нарушает обнаружение зависимости), и я не могу понять, откуда он, или как его изменить. Я вижу:

 com/redacted/redacted/1.1.0-SNAPSHOT/ redacted-1.1.0-20150717.213849-1-release.aar redacted-1.1.0-20150717.213849-1-release.aar.md5 redacted-1.1.0-20150717.213849-1-release.aar.sha1 redacted-1.1.0-20150717.213849-1.pom redacted-1.1.0-20150717.213849-1.pom.md5 redacted-1.1.0-20150717.213849-1.pom.sha1 

По какой-то причине он добавляет дату, а также суффикс -release только к файлам, связанным с AAR, но не к файлам POM. Если я вручную переименую эти файлы, все будет работать так, как ожидалось. Например, это то, что я ожидаю получить:

 com/redacted/redacted/1.1.0-SNAPSHOT/ redacted-1.1.0-20150717.213849-1.aar redacted-1.1.0-20150717.213849-1.aar.md5 redacted-1.1.0-20150717.213849-1.aar.sha1 redacted-1.1.0-20150717.213849-1.pom redacted-1.1.0-20150717.213849-1.pom.md5 redacted-1.1.0-20150717.213849-1.pom.sha1 

Как я могу изменить способ доставки этих файлов?

То, что вы используете, – это (внимание мое):

Важно: при включении публикации не по умолчанию плагин публикации Maven публикует эти дополнительные варианты в виде дополнительных пакетов ( с классификатором ). Это означает, что это несовместимо с публикацией в репозитории maven. Вы должны либо опубликовать один вариант в репозитории, либо разрешить публикацию всех конфигураций для межпроектных зависимостей.

См. Документацию: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication

Выпуски и debug суффиксов, которые вы видите, представляют собой классификаторы, введенные, позволяя публиковать артефакты, отличные от дефолта. Элементы <artifact> в build/ivy.xml , который используется в качестве основы для конфигурации Maven, содержат эти классификаторы.

Итерация по артефактам в конфигурациях и удаление классификатора не работает. Хотя установка классификатора разрешена, его исходное значение сохраняется.

Но что делает работа обертывания оригинальных артефактов. Обертка всегда возвращает null для классификатора. Это приводит к тому, что артефакт выпуска и отладки имеет тот же самый полный идентификатор (= имя + классификатор), что приводит к публикации только одного артефакта. Это можно исправить, используя другое имя для артефактов отладки:

 class UnclassifiedPublishArtifact implements PublishArtifact { private PublishArtifact delegatee; private boolean isDebugArtifact; UnclassifiedPublishArtifact(PublishArtifact delegatee, isDebugArtifact) { this.delegatee = delegatee this.isDebugArtifact = isDebugArtifact } @Override String getName() { return delegatee.name + (isDebugArtifact ? '-debug' : '') } @Override String getExtension() { return delegatee.extension } @Override String getType() { return delegatee.type } @Override String getClassifier() { return null } @Override File getFile() { return delegatee.file } @Override Date getDate() { return delegatee.date } @Override TaskDependency getBuildDependencies() { return delegatee.buildDependencies } } project.afterEvaluate { configurations.each { configuration -> def artifacts = configuration.artifacts if (!artifacts.isEmpty()) { def unclassifiedArtifacts = [] unclassifiedArtifacts.addAll(artifacts.collect { classifiedArtifact -> new UnclassifiedPublishArtifact(classifiedArtifact, classifiedArtifact.classifier == 'debug') }) artifacts.clear() artifacts.addAll(unclassifiedArtifacts) } } } 

Я не могу полностью понять из документации, каковы последствия для зависимостей проекта, поэтому вы должны проверить, все ли они работают.

Intereting Posts
Как совершать пропущенные звонки? Камера Android не сохраняется в определенной папке Не существует локального пути Studio Studio Как изменить настройку 3g dns на Android? Android Image Slider от Daimajia не работает в фрагменте, но работает, когда не находится в фрагменте Как я могу просматривать задачи Gradle для Android из Android Studio? Как отключить / изменить AutoFocus и AutoWhiteBalance на Android-камеру с помощью OpenCV Как я могу заменить календарь по умолчанию для Android OS? Как добавить строку в нижней части счетчика, как, например, edittext в android Что такое работа setTag и getTag в шаблоне ViewHolder? Можно ли изменить доменное имя компании в андроид-студии после создания проекта? Как получить изображение с камеры без использования приложения камеры (через службу) Android – как получить уведомление при завершении синхронизации при запросе синхронизации с ContentResolver.requestSync () В браузере Chrome на Android появилась странная ошибка SetBackgroundResource действует отличным от setBackground с помощью RippleDrawable