Подтвердить что ты не робот

Maven отказывается загружать aar упакованную зависимость из удаленного репозитория

Я хочу использовать эту зависимость от android в моей программе java:

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

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

[ERROR]/home/peng/git-drone/dronespike/src/main/scala/Main.scala:1: объект o3dr не является членом пакета com

[ERROR] import com.o3dr.android._
[ОШИБКА] ^

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

4b9b3361

Ответ 1

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

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

использование поддерживаемой упаковки: apk, aar или apklib

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

Ответ 2

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

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

Ответ 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>

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

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

Который уважает URL-адрес репозитория плюс его координаты Maven (groupId, artifactId, версия).


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

Ответ 4

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")

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