Как опубликовать библиотеку Android в репозитории Maven, чтобы ее можно было легко использовать? - PullRequest
0 голосов
/ 18 февраля 2019

Я опубликовал свою библиотеку Android (с зависимостями) в хранилище maven AWS S3, используя это руководство.

В новом проекте я добавил корзину S3 в качестве хранилища Maven, иЯ могу успешно использовать его, если добавлю следующее в файл build.gradle нового проекта:

implementation ('com.mydomain:my_library:1.4:release@aar') {
    transitive=true
}

(требуется «transitive = true», чтобы включить зависимости библиотеки.)

Тем не менее, я бы хотел, чтобы другие могли использовать упрощенную версию этого, как я видел во многих других библиотеках:

implementation 'com.mydomain:my_library:1.4'

Когда я это делаю, я получаю «Не удается разрешить символ»«ошибки в коде и (конечно) получение ошибок« не существует »при попытке построить свой проект».

Файл POM моей библиотеки показан ниже.Есть ли что-то, что я могу изменить там, чтобы я мог использовать «упрощенную» строку реализации выше, или есть что-то еще, что я могу сделать?

Примечание: я попытался заменить « pom » на« aar », сделал кэш недействительным и снова запустился, но поведение было идентичным.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mydomain</groupId>
  <artifactId>my_library</artifactId>
  <version>1.4</version>
  <packaging>pom</packaging>
  <dependencies>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>appcompat-v7</artifactId>
      <version>27.1.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support.constraint</groupId>
      <artifactId>constraint-layout</artifactId>
      <version>1.1.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>design</artifactId>
      <version>27.1.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.reactivex.rxjava2</groupId>
      <artifactId>rxandroid</artifactId>
      <version>2.1.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.reactivex.rxjava2</groupId>
      <artifactId>rxjava</artifactId>
      <version>2.2.4</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.github.instacart.truetime-android</groupId>
      <artifactId>library-extension-rx</artifactId>
      <version>3.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.dagger</groupId>
      <artifactId>dagger-android</artifactId>
      <version>2.15</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.nostra13.universalimageloader</groupId>
      <artifactId>universal-image-loader</artifactId>
      <version>1.9.5</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.firebase</groupId>
      <artifactId>firebase-core</artifactId>
      <version>16.0.6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.firebase</groupId>
      <artifactId>firebase-messaging</artifactId>
      <version>17.3.4</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

У меня была точно такая же проблема!и задал тот же вопрос, вы можете увидеть мой вопрос здесь .Моя проблема заключалась в объяснениях в ответах, а сообщения, которыми я поделился, были недостаточно ясными (или, может быть, я не смог их правильно понять) ... НО!затем я нашел этот супер полезный пост благодаря AndroidWeekly, я выполнил действия, описанные в этом посте, и затем я смог опубликовать свою библиотеку в maven, вы можете проверить мою библиотеку в здесь ?и вы можете добавить его в свой проект, используя это:

implementation 'com.codesgood:justifiedtextview:1.1.0'

Просто так, как вы хотите сделать свой доступным через Gradle.Дайте мне знать, если вам понадобится помощь в прохождении шагов этого поста, я буду рад помочь ?

0 голосов
/ 28 февраля 2019

Если вы собираете библиотеку, используя maven, вам нужно добавить плагин maven для Android.Таким образом, вы можете упаковать его как файл AAR.В этом случае, по моему опыту, область компиляции не распространяет зависимости вашей библиотеки в путь, вам все равно нужно добавить флаг transitive = true.

веб-сайт плагина: https://simpligility.github.io/android-maven-plugin/plugin-info.html

Пример POM: https://github.com/fcopardo/EasyRest/blob/master/pom.xml

Теперь, если вы используете gradle для создания библиотеки, вам нужно понять, как gradle упаковывает зависимости.Есть два способа:

реализация: с помощью этого слова зависимость сохраняется в пути библиотеки.Это не будет выставлено на пути потребителя.Следовательно, потребительский проект потерпит неудачу, если необходимо найти зависимость библиотеки.Например, если вы собираетесь возвращать наблюдаемые RxAndroid, компиляция завершится неудачей, поскольку компилятор не сможет найти классы RxAndroid, указанные в сигнатуре методов возврата.С другой стороны, если зависимость библиотеки используется только для внутреннего использования (например, вы создаете модуль rest с использованием модернизации и выставляете только RxJava в возвращаемых сигнатурах), компиляция будет возможна.

api: является точнымпротивоположность реализации.Зависимости, помеченные как api, попадут на путь потребителя, поэтому его необходимо использовать каждый раз, когда вы выставляете одну из своих зависимостей.Используя тот же пример, что и раньше, вы должны импортировать RxAndroid с api и модифицировать с реализацией.Это должно позволить вам использовать библиотеку без каких-либо дополнительных импортов или флагов.

Имейте в виду, плагин maven для Android поддерживает формат проекта gradle начиная с версии 4, поэтому вы можете иметь как файл POM, так и .gradle.файл.

0 голосов
/ 25 февраля 2019

Если ваш проект размещен на Github, рассмотрите возможность использования https://jitpack.io/.

Jitpack позволяет очень легко публиковать ваши библиотеки в gradle прямо из Github.

Хотяэтот ответ не дает прямого ответа на ваш вопрос, он предлагает действительную и более простую альтернативу.

...