2016-06-19 8 views
13

Я хочу использовать эту андроиду зависимость в моей Java программе:Maven отказывается загружать AAR упакованной зависимости от удаленного хранилища

http://jcenter.bintray.com/com/o3dr/android/dronekit-android/2.9.0/ 

поэтому я добавил все плагин & Хранилища в мой Maven п файл:

<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 не игнорировать его, как будто он не существует, если я импортировать его основной пакет в файле лестницу и построить его с mvn clear install -U, я получаю эту ошибку:

[ERROR] /home/peng/git-drone/dronespike/src/main/scala/Main.scala:1: object o3dr is not a member of package com
[ERROR] import com.o3dr.android._
[ERROR] ^

Вопрос: Что должен Я делаю, чтобы исправить эту проблему?

+0

Я думаю, вам стоит взглянуть на каталог .m2 вашего центрального (jcenter) репозитория и проверить, действительно ли этот артефакт существует на правильном пути, то есть {.m2} /com/o3dr/android/dronekit-android/2.9 0,0 /. Если он там не существует, вам нужно будет добавить его –

ответ

4

Используйте упаковку для Android, например. <packaging>apk</packaging>.

Если Maven не смог загрузить артефакт, он скорее пожаловался бы на жизненный цикл сборки. Проблема в том, что артефакт загружается, но не используется. aar не является стандартным артефактом Maven, поэтому Maven не знает, что с ним делать. Для этого требуется сторонний плагин с расширениями, следовательно, использование android-maven-plugin. Читая его documentation, у него есть некоторые требования к правильной работе. В частности, вы не использовать андроид упаковки, как указано здесь:

usage of a supported packaging: apk, aar or apklib

Действительно, глядя на плагины source code он проверяет андроид упаковки, прежде чем добавить что-нибудь от aar к классам.

+0

Btw, это может вызвать это предупреждение из плагина: транзитивные зависимости действительно должны обеспечиваться управлением зависимостью Maven. Мы предлагаем вам попросить вышеуказанных поставщиков правильно упаковать их компонент. Вещи могут ломаться при компиляции и/или во время выполнения из-за нескольких копий несовместимых библиотек. –

+0

Большое спасибо, я могу подтвердить, что загрузка файла aar из репозитория bintray действительна и может быть открыта напрямую, не могли бы вы быть более конкретными? А именно, что нужно установить в андроид-maven-plugin для чтения aar? – tribbloid

+0

Кроме того, если вы перейдете на https://dl.bintray.com/3d-robotics/maven/com/o3dr/android/dronekit-android/2.9.0/, вы обнаружите, что нет упаковки apk. И его не определено в исходном коде dronekit либо – tribbloid

6

В зависимости от требований вашей версии 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> 

без нее, зависимость не была загружена.

+0

Не работает и дает ту же ошибку, зависимость до сих пор не включена. – tribbloid

+0

Я опубликовал свой pom.xml на github: https://github.com/tribbloid/dronespike/blob/master/pom.xml. Тем не менее, большое спасибо за вашу помощь! – tribbloid

3

Глядя на 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> 

И действительно эффективный целевой файл доступен по адресу:

https://dl.bintray.com/3d-robotics/maven/com/o3dr/android/dronekit-android/2.9.0/ 

Что уважает URL репозитория плюс его Maven координату (идентификатор_группы, артефакт, версия).


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

+0

Все еще не работает: - <. см. https://codeship.com/projects/89488/builds/16226448 и https://github.com/tribbloid/dronespike/blob/master/pom.xml для компиляции результата – tribbloid

+0

Что делать, если вы попробуете из командной строки следующую команду : 'mvn dependency: get -Dartifact = com.o3dr.android: dronekit-android: 2.9.0: aar -DrepositoryUrl = http: // dl.bintry.com/3d-robotics/maven'? –

+0

Результат выглядит неплохо: BUILD SUCCESS Общее время: 5.563 s Это означает, что решение для плавания в классе aar должно быть виновато за право? – tribbloid

0

sbt-android может обрабатывать эту конфигурацию.

build.sbt

androidBuildJar 
name := "yourproject" 
organization := "yourorganization" 
platformTarget := "android-24" 
libraryDependencies +="com.o3dr.android" % "dronekit-android" % "2.9.0" 

проект/plugins.sbt

addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.7") 

Добавить в случае необходимости публикации и правила разрешения имен.