Maven отказывается загружать упакованную зависимость aar из удаленного репозитория
Я хочу использовать эту зависимость android в моей программе java:
http://jcenter.bintray.com/com/o3dr/android/dronekit-android/2.9.0/
поэтому я добавил Все плагины и репозитории в свой файл maven pom:
<repositories>
<repository>
<id>central</id>
<name>bintray</name>
<url>http://jcenter.bintray.com</url>
<!--<snapshots>-->
<!--<enabled>false</enabled>-->
<!--</snapshots>-->
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<!--<snapshots>-->
<!--<enabled>false</enabled>-->
<!--</snapshots>-->
<id>central</id>
<name>bintray-plugins</name>
<url>http://jcenter.bintray.com</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>com.simpligility.maven.plugins</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>4.1.0</version>
<extensions>true</extensions>
<configuration>
<sign>
<debug>false</debug>
</sign>
</configuration>
</plugin>
...
затем я добавляю зависимость в тот же файл:
<dependency>
<groupId>com.o3dr.android</groupId>
<artifactId>dronekit-android</artifactId>
<version>2.9.0</version>
<type>aar</type>
</dependency>
но ничего не происходит, maven игнорирует его, как будто он не существует, если я импортирую его основной пакет в файл scala и создаю его с mvn clear install -U
, Я получаю эту ошибку:
[ошибки] /главная/Пэн/ГИТ-дрон/dronespike/src/главная/скала/Главная.scala: 1: объект o3dr не является членом пакета com
[Ошибка] импорт com.o3dr.андроид._
[Ошибка]^
вопрос: что я должен сделать, чтобы исправить эту проблему?
4 ответов
используйте упаковку Android, например <packaging>apk</packaging>
.
если Maven не может загрузить артефакт, он будет жаловаться гораздо раньше в жизненном цикле сборки. Проблема в том, что артефакт загружается, но не используется. aar
не является стандартным артефактом Maven, поэтому Maven не знает, что с ним делать. Для его использования требуется сторонний плагин с расширениями, следовательно, использование android-maven-plugin
. Чтение его документация, он имеет некоторые требования для правильной работы. В частности, вы не использовали упаковка для Android, как уже упоминалось здесь:
использование поддерживаемой упаковки: apk, aar или apklib
действительно, глядя на плагин исходный код он проверяет упаковку android перед добавлением чего-либо из aar
к пути к классам.
в зависимости от требований вашей версии maven, основываясь на том, с чем я столкнулся раньше, вам может потребоваться добавить конфигурацию для выпуска и моментального снимка. В моем случае я просто смог получить lib, как только я указал эти параметры:
<repositories>
<repository>
<id>central</id>
<name>bintray-plugins</name>
<url>http://jcenter.bintray.com</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.o3dr.android</groupId>
<artifactId>dronekit-android</artifactId>
<version>2.9.0</version>
<type>aar</type>
</dependency>
</dependencies>
без него зависимость не была загружена.
смотреть на!--4-->bintray репозиторий, из которого доступна зависимость, и проверьте настройки репозитория через его меня опция, ваши координаты репозиториев неверны, вместо этого они должны быть:
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>bintray-3d-robotics-maven</id>
<name>bintray</name>
<url>http://dl.bintray.com/3d-robotics/maven</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>bintray-3d-robotics-maven</id>
<name>bintray-plugins</name>
<url>http://dl.bintray.com/3d-robotics/maven</url>
</pluginRepository>
</pluginRepositories>
и действительно эффективный целевой файл доступен через URL:
https://dl.bintray.com/3d-robotics/maven/com/o3dr/android/dronekit-android/2.9.0/
который уважает URL репозитория плюс его координаты Maven (groupId, artifactId, version).
также Примечание: do не использовать идентификатор репозитория central
, Если по конкретной причине, в противном случае вы бы переопределили Центральный (по умолчанию) репозиторий вашей сборки Maven, и все ваши зависимости (и плагины) будут извлекаться только новым объявленным.
sbt-android может обрабатывать эту конфигурацию.
построить.sbt
androidBuildJar
name := "yourproject"
organization := "yourorganization"
platformTarget := "android-24"
libraryDependencies +="com.o3dr.android" % "dronekit-android" % "2.9.0"
проект/Плагины.sbt
addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.7")
при необходимости добавьте правила публикации и распознавателя.